构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)的的調(diào)用時(shí)刻及調(diào)用順序
?
對(duì)象是由“底層向上”開始構(gòu)造的,當(dāng)建立一個(gè)對(duì)象時(shí),首先調(diào)用基類的構(gòu)造函數(shù),然后調(diào)用下一個(gè)派生類的構(gòu)造函數(shù),依次類推,直至到達(dá)派生類次數(shù)最多的派生次數(shù)最多的類的構(gòu)造函數(shù)為止。因?yàn)?#xff0c;構(gòu)造函數(shù)一開始構(gòu)造時(shí),總是要調(diào)用它的基類的構(gòu)造函數(shù),然后才開始執(zhí)行其構(gòu)造函數(shù)體,調(diào)用直接基類構(gòu)造函數(shù)時(shí),如果無專門說明0,就調(diào)用直接基類的默認(rèn)構(gòu)造函數(shù)。在對(duì)象析構(gòu)時(shí),其順序正好相反。?? 下面簡(jiǎn)單介紹下這三個(gè)函數(shù)。
構(gòu)造函數(shù)
????? 1.構(gòu)造函數(shù)不能有返回值
????? 2.缺省構(gòu)造函數(shù)時(shí),系統(tǒng)將自動(dòng)調(diào)用該缺省構(gòu)造函數(shù)初始化對(duì)象,缺省構(gòu)造函數(shù)會(huì)將所有數(shù)據(jù)成員都
初始化為零或空???
????? 3.創(chuàng)建一個(gè)對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)
析構(gòu)函數(shù)
析構(gòu)函數(shù)沒有參數(shù),也沒有返回值。不能重載,也就是說,一個(gè)類中只可能定義一個(gè)析構(gòu)函數(shù)
如果一個(gè)類中沒有定義析構(gòu)函數(shù),系統(tǒng)也會(huì)自動(dòng)生成一個(gè)默認(rèn)的析構(gòu)函數(shù),為空函數(shù),什么都不做
? 調(diào)用條件:1.在函數(shù)體內(nèi)定義的對(duì)象,當(dāng)函數(shù)執(zhí)行結(jié)束時(shí),該對(duì)象所在類的析構(gòu)函數(shù)會(huì)被自動(dòng)調(diào)用;
??????????????? ?2.用new運(yùn)算符動(dòng)態(tài)構(gòu)建的對(duì)象,在使用delete運(yùn)算符釋放它時(shí)。
拷貝構(gòu)造函數(shù)
拷貝構(gòu)造函數(shù)實(shí)際上也是構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,其名字也與所屬類名相同。拷貝構(gòu)造函數(shù)中只有一個(gè)參數(shù),這個(gè)參數(shù)是對(duì)某個(gè)同類對(duì)象的引用。
!!!在三種情況下被調(diào)用:
???? 1.用類的一個(gè)已知的對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí);
???? 2.函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參的結(jié)合時(shí);
???? 3.函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行完返回調(diào)用者。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wwzyy/p/4385406.html
總結(jié)
以上是生活随笔為你收集整理的构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: delphi的几个特别关键字 obje
- 下一篇: 源码注释性容器的创建及初始化