2013-07-28 27 views
2

我讀過你的一個答案(Will an 'empty' constructor or destructor do the same thing as the generated one?)。你寫道:「我們假設類型C的對象是在.cpp文件中A的構造函數的定義中創建的,它也包含了struct C的定義。現在,如果你使用struct A並且需要銷燬一個A對象,編譯器將提供一個析構函數的隱式定義,就像上面的情況一樣,這個析構函數也會隱式地調用auto_ptr對象的析構函數,並且會刪除指向C對象的指針 - 而不知道C!的定義出現在定義了結構A的構造函數的.cpp文件中「。你能否爲我解釋兩件事: 1.爲什麼A的析構函數知道C的定義? 2.添加A的空析構函數如何幫助sityation? 謝謝C++,一個類的空析構函數

回答

2

1)的A析構函數應該知道如何摧毀C因爲A可能包含auto_ptrCauto_ptr當包含對象死亡時,預計會死亡。因此,A的析構函數應該知道如何銷燬一個C

2)關鍵是析構函數定義只寫在.cpp文件中。這意味着對析構函數的調用鏈接到從.cpp文件編譯的對象。當.cpp文件被編譯時,它可以訪問C的定義(這就是寫在答案中的內容)。因此,.cpp文件中的析構函數可以根據需要摧毀C,而不會破壞C,因爲在編譯器只看到class C的正向聲明的地方沒有定義和/或定義析構函數。

而且,看到

The relation between Forward declaration and destructors

+0

非常感謝,我知道了 – Victoria