回答
正如評論中提到的那樣,它是基類。從邏輯上講,由於您可以訪問Derived類(包括構造函數)中的基本公共和受保護成員,因此需要先分配它。嘗試從下面的代碼開始玩遊戲。
#include <iostream>
class Base
{
public:
Base() {std::cout<<"Base CTOR" << std::endl;}
};
class Derived : public Base
{
public:
Derived():Base() {std::cout<<"Derived CTOR"<<std::endl;}
};
int main(int argc, char* argv[])
{
Derived d;
}
此代碼查看構建順序,而不是內存分配。 –
-1實際上,一個對象的所有內存一次分配爲一個塊。 –
派生對象的空間包含所有派生成員和所有基礎成員。派生對象只有一個分配,分配的內存保存對象的所有部分。
首先,
分配,存儲器的保留您’重新詢問,不同於和先初始化(其基本上設置在該存儲器適當值的構造器的執行) ,
正式(我們的神聖標準)和實際上在上有區別對於最衍生對象的內存是否需要連續,其中正式定義的「區域的內存」儘可能不連續,主要是爲了支持多個虛擬繼承。
這就是說,在實踐中,最派生對象是存儲器的單個的,連續的存儲塊,它包括空間對所有基類的子對象和數據成員的子對象,並且該塊是一定分配所有立刻。
初始化(調用構造函數)在分配後進行。如果通過拋出異常來初始化失敗,則new
表達式將保證解除分配。然而,如果所採用的分配功能具有額外的自定義參數(所謂的「放置新的」)並且沒有相應的解除分配功能可用,則該擔保是無效的,如同例如。用於早期版本的微軟構建MFC類框架(這非常具有諷刺意味:初始化失敗的程序只會在調試版本中泄漏內存&hellip;)。
對於不需要提問的人來說,這是一個很好的答案;-) –
- 1. 將派生類構造函數分配給基類指針
- 2. 關於基類和派生類的構造函數調用
- 3. 在C++中調用的基類和派生類構造函數
- 4. 從基類構造函數調用派生類的虛函數?
- 5. 構造函數在基類和派生類
- 6. 基類構造函數在派生類構造函數之前真的調用
- 7. 派生類的構造函數以基類對象
- 8. 從調用派生類的基類構造函數在Java中
- 9. 設置基類屬性使用派生類的構造函數
- 10. 我不希望派生類繼承基類的構造函數
- 11. 強制派生類使用基類的構造函數
- 12. 基類如何可以禁用派生類的構造函數
- 13. 派生類調用錯誤的基類構造函數
- 14. 派生類中的VB.NET構造函數
- 15. 派生類的構造函數(Java)
- 16. 派生類的python構造函數
- 17. 指針在基類構造函數派生類
- 18. C# - 使所有派生類調用基類構造函數
- 19. 在派生類構造函數中複製基類
- 20. 是否可以從基類構造函數創建派生類?
- 21. 在基類構造函數中使用派生類屬性
- 22. 在派生類中調用基類構造函數
- 23. 爲什麼派生類需要使用基類構造函數
- 24. 在派生類中調用基類構造函數
- 25. 使用派生類分配基類指針的內存
- 26. 派生類構造函數調用
- 27. 如何從派生類訪問內部類構造函數?
- 28. 如果基類構造函數不是constexpr,我可以構造派生類constexpr的構造函數嗎?
- 29. 派生C++類的內存分配
- 30. 構造函數以kotlin派生類中的可分發構造函數
[首先,請參閱此處瞭解更多詳細信息](http://stackoverflow.com/questions/2517050/c-construction-and-initialization-order-guarantees) – tmpearce
@ close-voter:不,分配不是與初始化相同。不要根據你不知道的感覺投票。只對你知道的事情投票。 –
@ Cheersandhth.-Alf(首先,不,我不是近親選民)我猜根據關於*構造函數*的措詞,分配和初始化的術語可能混淆在問題中,因此鏈接......也許不是。無論如何,我在下面找到您的答案,以提供信息,+1 – tmpearce