C++ 基*p=新派生()中的内存分配

C++ 基*p=新派生()中的内存分配,c++,C++,如果我有一个类基{}和派生类:公共基{},执行以下操作时: Base* p = new Derived(); 为p分配了多少内存?存储派生的对象所需的内存量 您可以使用sizeof(派生)sizeof(派生)在p指向的地址获取字节数。在这种情况下,p将指向内存块的开始,其中包含派生的对象。因此,分配的大小将是sizeof(派生),类型为Base的指针指向那里。我记得总大小是:sizeof(派生)。如果将一个方法标记为virtualsizeof(),则指向vtable的指针也会考虑4字节 所以如

如果我有一个
类基{}
派生类:公共基{},执行以下操作时:

Base* p = new Derived();

p
分配了多少内存?

存储
派生的
对象所需的内存量


您可以使用
sizeof(派生)
sizeof(派生)
p
指向的地址获取字节数。在这种情况下,
p
将指向内存块的开始,其中包含
派生的
对象。因此,分配的大小将是
sizeof(派生)
,类型为
Base
的指针指向那里。

我记得总大小是:sizeof(派生)。如果将一个方法标记为
virtual
sizeof(),则指向vtable的指针也会考虑4字节

所以如果你有

class Base {
int a;
}
sizeof(派生)
将为4

class Base {
int a;
virtual foo();
}

sizeof(派生)
将是8

大概
sizeof(派生)
?p是一个指针。新建派生对象创建派生类型的对象。所以它是sizeof(派生的)这是家庭作业吗?(C++中,表达式不根据你分配给它的含义而改变它)。如果这抛出了一个
bad\u alloc
,那么已经分配了0个字节。您是否在询问
p
本身分配了多少内存?或者您是在询问为
p
指向的
新派生的
对象分配了多少内存?如果是前者,
sizeof(Base*)
。如果是后者,则通常会出现至少
sizeof(派生)
.4字节的开销,但也会出现其他值。C++程序员不需要关心。code>sizeof(派生)
已经包含虚拟函数所需的任何开销。