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(派生)
已经包含虚拟函数所需的任何开销。