我在這個題目中不想解釋什么,只是針對書中一個例題的一點分析而已细疚。因為COPY構(gòu)造函數(shù)的運用涉及到臨時對象的生成和銷毀蔗彤,而且這個過程是悄無聲息的,所以很難引起人們的注意疯兼。所以請看下面的圖片:
這個圖中有默認的構(gòu)造函數(shù)然遏,它對類中的靜態(tài)成員進行遞增運算。一個以值傳遞方式接受對象參數(shù)的函數(shù),因為是值傳遞所以它會用到COPY構(gòu)造函數(shù)創(chuàng)建一個臨時對象。還有一個析構(gòu)函數(shù)對靜態(tài)成員變量進行遞減。它們用來對程序中實際產(chǎn)生的對象進行計數(shù)操作。
這個靜態(tài)成員被初始化為0吩坝。
下面來看程序:
從上圖可知總共有3個對象被創(chuàng)建柠贤,一個臨時對象被創(chuàng)建穗熬,總共4個對象濒翻,程序運行的結(jié)果是:
由上圖可知析構(gòu)函數(shù)被調(diào)用了4次其結(jié)果應(yīng)該是0才對中狂,現(xiàn)在為啥是-1呢?因為析構(gòu)函數(shù)被調(diào)用4次所以構(gòu)造函數(shù)肯定也被調(diào)用了4次扑毡。但是默認的構(gòu)造函數(shù)只顯示了3次胃榕,那么剩下的那個構(gòu)造過程是由誰來完成的呢?現(xiàn)在我把程序變動一下瞄摊。
現(xiàn)在我把自定義COPY構(gòu)造函數(shù)的注釋去掉了再運行勋又。
可以看出那個臨時的對象也是經(jīng)過構(gòu)造的并且它是用COPY構(gòu)造函數(shù)構(gòu)造完成的,而編譯器提供的默認COPY構(gòu)造函數(shù)并不能給出明確提示换帜,所以你只能自定義COPY構(gòu)造函數(shù)楔壤,我想這就是作者所謂的顯式COPY構(gòu)造函數(shù)吧。