Ye *_* Oo 2 c++ polymorphism inheritance memory-management segmentation-fault
如果我有以下两个课程:
#include <cstdlib>
class Parent
{
protected:
int* mem = (int*) std::malloc(5); // pointer to dynamically-stored object
public:
Parent() {};
virtual ~Parent()
{
delete(mem);
}
};
class Child: public Parent
{
public:
Child() {};
~Child()
{
delete(mem);
}
};
int main(void)
{
Child* c = new Child();
delete(c);
}
Run Code Online (Sandbox Code Playgroud)
不应该打电话delete调用该类的实例Child导致分段错误,因为父级的析构函数也会在子级析构函数之后自动调用?如果是这样,解决方案是否是类Child只处理释放类“拥有”的动态分配的内存(即不在 的析构函数中Child删除并让其处理它)?memChildParent
我运行了我的 main 函数,并预计会发生分段错误,因为mem被释放了两次 - 一次在 的Child析构函数中,另一次在Parent析构函数中。没有发生错误,这让我感到惊讶。谁能解释一下为什么吗?