如果我有:我的基地在哪裏創建?
struct Base
{
};
struct Derived : Base
{
};
我創建派生主:
Derived* d = new Derived;
在哪裏(上堆或堆棧)是我的基地產生的?我是否正確推理出Base是Derived的一部分,因此無論創建Derived哪裏都創建它?還是以其他方式工作?
如果我有:我的基地在哪裏創建?
struct Base
{
};
struct Derived : Base
{
};
我創建派生主:
Derived* d = new Derived;
在哪裏(上堆或堆棧)是我的基地產生的?我是否正確推理出Base是Derived的一部分,因此無論創建Derived哪裏都創建它?還是以其他方式工作?
基類貢獻通常是派生對象的一部分(因此使用對象內存的一部分以及派生部分)。然而,你的例子可以使這個不相關,因爲基類部分由於C++空基類優化而佔用了零內存。
儘管衍生結構也是空的,但最終對象的大小必須至少爲一個字節,因爲所有對象都必須佔用空間,以確保兩個不同對象的地址不同。請參閱:Why is the size of an empty class not zero?瞭解更多信息。
該基地與Derived在相同的內存段中創建。在你的例子中,因爲你在堆上分配了Derived,所以Base也被分配在堆上。他們在記憶中形成一個連續的物體。