我讀過你的一個答案(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
A
回答
2
1)的A
析構函數應該知道如何摧毀C
因爲A
可能包含auto_ptr
到C
。 auto_ptr
當包含對象死亡時,預計會死亡。因此,A
的析構函數應該知道如何銷燬一個C
。
2)關鍵是析構函數定義只寫在.cpp文件中。這意味着對析構函數的調用鏈接到從.cpp文件編譯的對象。當.cpp文件被編譯時,它可以訪問C的定義(這就是寫在答案中的內容)。因此,.cpp文件中的析構函數可以根據需要摧毀C,而不會破壞C,因爲在編譯器只看到class C
的正向聲明的地方沒有定義和/或定義析構函數。
而且,看到
相關問題
- 1. C++類構造函數/析構函數
- 2. 類析構函數C++
- 3. noexcept一個函數返回一個類拋出析構函數
- 4. C++類的構造函數和析構函數
- 5. C++ 2構造函數和類中的析構函數
- 6. 構造函數和析構函數 - C++
- 7. C++抽象基類的構造函數/析構函數 - 一般正確性
- 8. EventHandlers和C#類析構函數/ Dispose
- 9. C中的析構函數#
- 10. C++中的析構函數
- 11. C++的析構函數
- 12. C++中的析構函數
- 13. 沒有析構函數的C++函數
- 14. C++一個類的默認構造函數調用另一個類的另一個默認構造函數
- 15. C++中的構造函數和析構函數與C#比較
- 16. C中的析構函數和構造函數C
- 17. C++虛擬析構函數
- 18. C++析構函數示例
- 19. 析構函數LinkedListelement在C++
- 20. C++析構函數代碼
- 21. C++:CRTP析構函數?
- 22. C++新手:析構函數
- 23. C++,與析構函數
- 24. 析構函數在C++
- 25. C++需要析構函數
- 26. lua userdata C++析構函數
- 27. C++虛擬析構函數
- 28. C++析構函數異常
- 29. 析構函數無類
- 30. 堆和類析構函數
非常感謝,我知道了 – Victoria