回答
拷貝構造函數提供您是否定義任何其他構造函數或沒有。只要你不聲明一個拷貝構造函數,你就可以得到一個拷貝構造函數。
僅當您聲明無構造函數時才提供no-arg構造函數。所以你沒有問題,除非你想要一個無參數的構造函數,但是認爲寫一個是浪費時間。
IIRC,C++ 0x有一種將構造委託給另一個構造函數的方法。我不記得細節,但它可以讓你通過指定另一個構造函數,以及傳遞給它的參數來定義一個無參數構造函數。在某些情況下可能會節省輸入一些數據成員初始值設定項。但默認的無參數構造函數不會提供這些初始化方法。
你不能 - 當你提供自己的默認構造函數時,編譯器會關閉它的一些自動生成的默認構造函數,所以你可以防止默認構造某些類。不過,我認爲的C++ 0x將允許你明確地說出一個默認的編譯器實現,例如:
MyClass() = default; // 'delete' also allowed by upcoming standard to disable
我不認爲任何編譯器支持這個還沒有 - 的C++ 0x(作爲下一個標準已經已知)還不是最終的,所以你現在只需要輸入你的默認構造函數。這不是很多代碼! MyClass() {}
只要所有成員本身都是默認可構造的。
你可以添加引用嗎? – qdii 2012-08-08 15:55:23
編譯器將始終生成默認拷貝構造函數,除非您提供自己的拷貝構造函數的定義。你的問題只是使用默認的無參數構造函數,如果存在任何構造函數定義,則不會生成該構造函數。但它不是很難提供無參數的構造函數的行爲完全像一個產生:
class yourClass
{
public:
yourClass(){}
}
我想你想把'public:'放在構造函數上面,而不是像Java/C#風格的關鍵字。 – AshleysBrain 2010-04-27 14:17:38
我更多的是指複製構造函數......如果你有很多屬性,那麼它就是更多的代碼。 – 2010-04-27 14:20:05
@AshleyBrain @Itay Moav:謝謝。我現在在Java工作,所以我的習慣改變了:-) – 2010-04-27 14:44:41
- 1. 編譯器何時不創建默認構造函數?
- 2. C++編譯器如何合成默認拷貝構造函數
- 3. 編譯器何時在C++中創建複製構造函數?
- 4. 編譯器生成的默認構造函數的工作 - C++
- 5. 如何在C++中編寫一個默認的構造函數?
- 6. 如何使用此C#代碼創建默認構造函數?
- 7. C++,默認構造函數
- 8. 在C++中創建一個默認構造函數
- 9. 編譯器啓動默認構造函數而不是帶參數的構造函數C++
- 10. 如何創建沒有默認構造函數的類
- 11. 默認構造函數與正常構造函數的類C++
- 12. 檢測編譯時是否存在默認構造函數
- 13. 不知道如何創建一個默認構造函數
- 14. C++默認的拷貝構造函數
- 15. 瞭解默認的構造函數C++
- 16. 創建構造函數時沒有適當的默認構造函數
- 17. C++構造函數調用默認構造函數
- 18. C++中隱式默認構造函數的默認值
- 19. 在Java中創建默認構造函數
- 20. 即使使用用戶定義的構造函數,編譯器何時仍會生成默認構造函數?
- 21. 編譯器執行並提供默認構造函數的構造函數代碼中會發生什麼?
- 22. 複製構造函數調用默認構造函數以創建對象
- 23. 默認構造函數C++錯誤
- 24. 未找到C++默認構造函數
- 25. C++默認拷貝構造函數
- 26. 默認構造函數C++頭和cpp
- 27. 默認構造函數C++格式
- 28. 類默認構造函數
- 29. 默認構造函數
- 30. 非默認構造函數
我不明白這個問題。這個普通的類class MyClass {public:int i;};'有一個默認的ctor,copy ctor和dtor。 – 2010-04-27 13:56:15
@Binary Worrier:「即使我提供了我自己的顯式構造函數」。如果你給MyClass一個int構造函數,那麼它將不再有一個默認的無參數構造函數。 – 2010-04-27 14:10:22
這是真的,我已經遠離C++了* far *太長了。道歉。 – 2010-04-27 14:30:50