c++中 子类对象与父类对象的内存关系

时间:2022-07-20 19:48:40
 

问题:如题。假设有父类A与子类B

A实例化一个对象a   B实例化一个对象b

那么在内存中 a与b的地址关系是什么。是他们的首地址都一样吗?

解答:

他们是没有必然关系的。就跟你随便生成另外两个其他类型的变量一样。当然,你实例化的对象b跟A有关系。
b对象开头的部分4个字节是虚函数表,接着就是基类的数据成员,然后是子类的数据成员。
 
 
对方:C++中的类对象实例化后存在内存中的什么位置,堆还是栈?
我(思索,但不确定): 既可能在栈又可能在堆
对方:什么情况下在栈,什么情况下在堆?
我:如果类对象实例作为局部变量出现,放在栈中,作用域结束,类实例所占内存释放,如果是通过指针的形式 new class就在堆中创建,
在堆中的要手动删除。
对方:栈的分配回收,谁来控制?
我:操作系统
对方:那还要类实例的析构函数做什么?
我(有点晕)