您好,我正在尝试从派生类创建派生类。 但是我不知道如何解决这个内存问题。
下面示例中的 C 类同时调用了他自己的析构函数和 B 析构函数。 但这不是我想要的,因为它会打乱我的内存。
我应该使用另一种方法还是有解决方案?
class A {
public:
virtual ~A() {}
};
class B : public A {
public:
B() : A() {}
virtual ~B() {std::cout << "B Destructor" << std::endl;}
};
class C : public B {
public:
C() : B() {}
~C() {std::cout << "C Destructor" << std::endl;}
};
int main() {
A *b = new B();
A *c = new C();
delete b;
delete c;
return 0;
}
输出:
./a.out
B Destructor
C Destructor
B Destructor
//编辑 抱歉,好像我实际上发布了一个工作示例。 尽管如此,在我的真实代码中(但我实际上使用了上面示例中的模式:我得到了错误
labrob(5254,0x7fff77789000) malloc: * error for object 0x7fe3dbc00030: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug Abort trap: 6
当我删除 C 的析构函数时,我得到了内存泄漏 这个错误实际上只出现在使用 C 型机器人时
所以我有 3 种机器人,它们可以在运行时多次实例化并被推送到机器人列表中。
解决不同线程上的迷宫问题
最后我用迭代器从列表中删除机器人
在 valgrind 上它说正在释放大量内存 所以我认为 B 和 C 的析构函数调用导致了这一点。
在我的 main.cpp 中:
// delete robots
for (auto it = robots.begin(); it != robots.end(); ++it) {
if(printSolution) std::cout << (*it)->solution() << std::endl;
delete *it;
}
return 0;
}
最佳答案
恐怕答案是 C++ 在这里做了正确的事情。如果这打乱了你的内存,你就做错了。不幸的是,如果没有更多的上下文,就很难说出你做错了什么。
当 C
继承自 B
时,~B()
应该销毁 B
部分拥有的内存C
和 ~C()
应该处理属于 C
但不属于 B
的任何内存.
关于c++ - 多重继承析构函数调用他自己和父析构函数? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709815/