回答
正如評論中提到的那樣,它是基類。從邏輯上講,由於您可以訪問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. 在C++中調用的基類和派生類構造函數
- 3. 關於基類和派生類的構造函數調用
- 4. 從基類構造函數調用派生類的虛函數?
- 5. 構造函數在基類和派生類
- 6. 基類構造函數在派生類構造函數之前真的調用
- 7. 從調用派生類的基類構造函數在Java中
- 8. 派生類調用錯誤的基類構造函數
- 9. 派生類的構造函數以基類對象
- 10. 調用基類和派生構造函數的順序
- 11. 派生類的python構造函數
- 12. 派生類的構造函數(Java)
- 13. C# - 使所有派生類調用基類構造函數
- 14. 在派生類中調用基類構造函數
- 15. 使用派生類分配基類指針的內存
- 16. 如何從派生類訪問內部類構造函數?
- 17. 如果基類構造函數不是constexpr,我可以構造派生類constexpr的構造函數嗎?
- 18. 派生C++類的內存分配
- 19. 構造函數以kotlin派生類中的可分發構造函數
- 20. 在派生類的函數中調用基類的構造函數
- 21. 分配派生類的基類
- 22. 傳遞參數給基類構造函數,同時創造派生類對象
- 23. 基礎和派生類分配
- 24. C++:派生類,「沒有匹配的構造函數」錯誤
- 25. 從派生構造函數調用基類方法
- 26. 如何在派生的內部類中編寫構造函數?
- 27. 從派生類構造函數傳遞參數到基類構造函數的使用
- 28. 調用派生類的構造函數在基類的構造函數之前執行
- 29. 創建委託傳遞給派生類的構造函數中的基類構造函數
- 30. 如何從派生自不同基類的類的構造函數中調用不同的派生類
[首先,請參閱此處瞭解更多詳細信息](http://stackoverflow.com/questions/2517050/c-construction-and-initialization-order-guarantees) – tmpearce
@ close-voter:不,分配不是與初始化相同。不要根據你不知道的感覺投票。只對你知道的事情投票。 –
@ Cheersandhth.-Alf(首先,不,我不是近親選民)我猜根據關於*構造函數*的措詞,分配和初始化的術語可能混淆在問題中,因此鏈接......也許不是。無論如何,我在下面找到您的答案,以提供信息,+1 – tmpearce