2010-10-30 80 views
2

如果我有:我的基地在哪裏創建?

struct Base 
{ 
}; 

struct Derived : Base 
{ 
}; 

我創建派生主:

Derived* d = new Derived; 

在哪裏(上堆或堆棧)是我的基地產生的?我是否正確推理出Base是Derived的一部分,因此無論創建Derived哪裏都創建它?還是以其他方式工作?

回答

5

基類貢獻通常是派生對象的一部分(因此使用對象內存的一部分以及派生部分)。然而,你的例子可以使這個不相關,因爲基類部分由於C++空基類優化而佔用了零內存。

儘管衍生結構也是空的,但最終對象的大小必須至少爲一個字節,因爲所有對象都必須佔用空間,以確保兩個不同對象的地址不同。請參閱:Why is the size of an empty class not zero?瞭解更多信息。

2

該基地與Derived在相同的內存段中創建。在你的例子中,因爲你在堆上分配了Derived,所以Base也被分配在堆上。他們在記憶中形成一個連續的物體。