Рецоммендед, 2020

Избор Уредника

Разлика између конструктора и деструктора

Понекад је потребно иницијализирати неки дио објекта прије његовог кориштења. На пример, ми радимо на стогу, пре него што извршимо неку акцију, врх стог мора увек бити постављен на нулу. Ова особина аутоматске иницијализације се изводи преко 'Цонструцтор'. Вероватно, ако објекат треба да изврши неки код пре него што буде уништен. На пример, ако објекат треба да затвори датотеку коју је отворио, пре њеног уништења. Може се извести уз помоћ 'Деструцтор'.

Погледајмо неке од основних разлика између конструктора и деструктора уз помоћ табеле упоређивања

Табела за упоређивање:

Основа за поређењеКонструкторДеструцтор
Сврха
Он додељује меморију објекту.Он ослобађа меморију објекта.
Декларацијацласс_наме (аргументи ако има) {};~ цласс_наме (без аргумената) {};
АргументиКонструктор прихвата аргументДеструцтор не прихвата никакав аргумент.
ЗовеКонструктор се позива аутоматски, док је објекат креиран.Деструцтор се позива аутоматски, пошто је блокиран или програм завршава.
РадКонструктор дозвољава објекту да иницијализује неку вредност пре, користи се.Деструцтор дозвољава објекту да изврши неки код у тренутку његовог уништења.
Редослед извршења
Конструктор се позива у узастопном реду.
Деструктор се позива у обрнутом редослиједу конструктора.
У бројевимаУ класи може бити више конструктора.Али увек постоји један деструктор у класи.
Цопи ЦонструцторКонструктор копирања дозвољава конструктору да декларише и иницијализује објекат из другог објекта.Нема таквог концепта.
Овер лоадингКонструктори могу бити преоптерећени.Деструктор не може бити преоптерећен.

Дефиниција конструктора:

Конструктор је у основи чланска функција класе која иницира објекат и додељује му меморију. Конструктори се могу лако идентификовати јер су декларисани и дефинисани истим именом као и класа. Конструктор нема тип повратка; дакле, они ништа не враћају, чак нису ни „празни“. Конструктор је увек дефинисан у јавној секцији класе.

У класи може бити више конструктора; могу се разликовати на основу броја и врсте аргумента који су прошли. Ако постоји више конструктора у класи; имплицитни конструктор (до-нотхинг цонструцтор) мора бити дефинисан заједно са њима; не ради ништа осим задовољава компајлер.

Конструктори се такође могу дефинисати са подразумеваним аргументима. Док они такође иницијализују објекат “динамички”. Конструктори се не могу ни наслиједити, нити могу бити виртуални, али могу бити преоптерећени. Не могу се упутити на њихову адресу.

Имплементација конструктора:

 цласс Цонст {инт а, б; публиц: Цонст () {// конструктор без параметра а = 0; б = 0; } Цонст (инт ц, инт д) {// конструктор са параметром а = ц; ц = д; }}; инт маин () {Цонст Ц1; Ц2 (10, 20); // ова наредба позива конструктора 

Када се креира Ц1, извршава се конструктор без параметра, јер Ц1 не пролази ниједан параметар. Док, када је Ц2 креиран, конструктор са параметром се извршава, пошто конструктору преноси два цела броја.

Дефиниција деструктора:

Деструцтор је такође функција члана класе, која ослобађа меморију додељену објекту. Дефинише се са истим именом као и класа, којој претходи симбол тилда (~). Деструктори се увек позивају обрнутим редоследом од конструктора.

У класи увек постоји један деструктор, јер не прихвата никакве аргументе. Локални објекти се уништавају чим контрола извршења остави блок; са друге стране, глобални објекти се уништавају када се заврши читав програм. Декстратор је имплицитно позван од стране компајлера. Ако су класе наслеђене, а класа је изведена из родитељске класе, и класе дете и родитељска класа имају деструкторе; тада се прво дезактор изведене класе, а затим деструктор родитељске класе.

Имплементација деструктора:

 цласс Цонст {инт а, б; публиц: Цонст (инт ц, инт д) {// конструктор с параметром. а = ц; ц = д; цоут << "вредност а и б су" < 

Када је Ц1 објект креиран, позива се конструктор са два параметра типа интегер и члан “а, б” се иницијализује и штампа се вредност “а, б”. Након што се тај деструктор позове и одштампа поруку "објекат Ц1 се уништи".

Кључне разлике између конструктора и деструктора

  1. Главна сврха конструктора је да додијели меморију објектима када су створени, док је главна сврха деструктора да размјести меморију објекта када се уништи.
  2. Конструктор може да прихвати аргументе као аргументе који се могу користити за иницијализацију података чланова класе. А деструктор не прихвата никакве аргументе јер је његов једини задатак да смести меморију објекта.
  3. Конструктор се позива када је објекат креиран. С друге стране, деструктор се позива када се програм заврши или програм напусти блок у којем је објекат креиран.
  4. Конструктор се обично користи за иницијализацију чланова података класе, док се деструктор користи да би објекат извршио неку акцију пре него што се уништи.
  5. Конструктори се извршавају у редоследу који значи да ако постоји изведена класа која наслеђује основну класу и креира се објекат изведене класе онда ће прво позвати конструктора основне класе, а затим конструктора изведене класе. С друге стране, деструктор изведене класе се назива прво, а затим основна класа значи да се деструктор изводи у обрнутом редослиједу конструктора.
  6. У класи, може бити више конструктора који су идентификовани бројем аргумента који су прошли. У класи постоји само један деструктор.
  7. Постоји концепт конструктора копирања који дозвољава објекту да се иницијализује из неког другог објекта, док деструктор нема такав концепт.
  8. Конструктори могу бити преоптерећени за извођење различитих акција под именом истог конструктора, док се деструктори не могу преоптеретити.

Закључак:

Поред сличности, конструктор и деструктор су специјална функција члана класе, и поседују исто име, основна разлика међу њима је, 'конструктор' се зове у време додељивања меморије и 'деструцтор' се зове на време размене меморије објеката. Компајлер имплицитно позива и конструктора и деструктора, иако они нису дефинисани у класи.

Top