我的基地在哪里创建?

时间:2010-10-30 14:45:29

标签: c++ inheritance

如果我有:

struct Base
{
};

struct Derived : Base
{
};

我在main中创建Derived:

Derived* d = new Derived;

在哪里(在堆上或堆栈上)是我的基础创建的?我是否正确地推断Base是Derived的一部分,因此它是在创建Derived的地方创建的?或者它以其他方式工作?

2 个答案:

答案 0 :(得分:5)

基类贡献通常是派生对象的一部分(因此使用对象内存的一部分以及派生部分)。但是,您的示例可能会使此无关紧要,因为基类部分由于C ++空基类优化而占用零内存。

尽管派生结构也是空的,但最终对象的大小必须至少为一个字节,因为所有对象都必须占用空间,以确保两个不同对象的地址不同。有关详细信息,请参阅:Why is the size of an empty class not zero?

答案 1 :(得分:2)

Base与Derived在同一内存段中创建。在您的示例中,由于您在堆上分配Derived,因此Base也在堆上分配。它们在记忆中形成一个连续的对象。

相关问题