在成員函式有建立區域物件而執行constructor時 , 或成員函式傳回物件以建立新物件,而執行copy constructor時,於成員函式執行結束後均會執行destructor.
在成員函式建立區域物件而執行constructor,且成員函式傳回參照物件,則當成員函式執行結束時,立即執行區域物件的destructor.而解構內的delete [] d將使得成員變數內容被刪除,以使得成員函式所傳回參照物件,其成員變數內容消失.(範例10-6(s1+s2).show()無成員變數內容).
在成員函式有建立區域物件而執行constructor時 , 或成員函式傳回物件以建立新物件,而執行copy constructor時,於成員函式執行結束後均會執行destructor.
在成員函式建立區域物件而執行constructor,且成員函式傳回參照物件,則當成員函式執行結束時,立即執行區域物件的destructor.而解構內的delete [] d將使得成員變數內容被刪除,以使得成員函式所傳回參照物件,其成員變數內容消失.(範例10-6(s1+s2).show()無成員變數內容).
在constructor內,指標成員變數在未宣告為動態記憶體指標前無法輸出指標內容,而使程式執行當機,可能原因為成員函式的輸入引數宣告為以參照接收.
傳回成員函式內建立的區域物件,不以建立新物件拷貝傳回物件方式傳回物件資料(因此不呼叫copy constructor),且在main主函式內可宣告建立一個物件以將傳回物件設定給該物件,並輸出該物件的成員變數資料.
範例10-5
成員函式傳回物件地址( this )與傳回指標為相同意義 ???,在main主函式以地址或指標取用成員函式均使用指向符號-> ???
參考範例p10-6-3 替字串類別加入[ ] 運算子多載函式
在destructor內執行釋放動態體記憶指標,並於destructor內輸出動態記憶體指標地址與內容,結果則地址依舊存在(指標依舊指向該地址),但內容則刪除.因此執行釋放動態體記憶指標的實質意義為指標依舊指向原來的記憶體地址,但內容刪除.
兩種方法可修改指標內容:1.將指標指向另一個地址 2.將指標宣告為動態記憶體指標,則指標由原本的指向改指到動態記憶體地址.
在destructor內執行釋放動態體記憶指標,並於destructor內輸出動態記憶體指標地址與內容,結果則地址依舊存在(指標依舊指向該地址),但內容則刪除.
以class_name(初始值1,初始值2,...初始值n)設定物件初始值格式,因須標示何者class使用的初始值,故class_name不可省略.
拷貝建構元格式class_name win1=win2;因win2會在之前預先宣告所屬類別,故class_name 可省略.
同一個物件的初始值可使用constructor設定多次,但一個物件的copy constructor僅可執行一次,第二次則會執行前面無class_name的物件設定式win1=win2;並執行operator=()設定運算子多載函式.
當宣告建立物件(即使無設定初始值)後,可不必執行物件拷貝,即可執行物件設定式,即執行operator=()運算子多載函式,
拷貝物件是以一個既存在物件建立一個新物件,會同時執行copy constructor,但建立一個物件的參照物件僅是建立一個既存在物件的
別名物件,並非為建立新物件.故不會執行copy constructor