【发布时间】:2017-08-13 06:24:40
【问题描述】:
我想破坏 B 类的对象。
class A {
public:
A() {
std::cout << "construct A" << av::endl;
a = new int;
}
virtual ~A() {
std::cout << "destruct A" << av::endl;
this->clear();
}
virtual void clear() {
std::cout << "clear A" << av::endl;
delete a;
}
protected:
int *a;
};
class B : public A {
public:
B() {
std::cout << "construct B" << av::endl;
b = new int;
}
~B() {
std::cout << "destruct B" << av::endl;
}
void clear() override {
std::cout << "clear B" << av::endl;
delete b;
delete this->a;
}
private:
int *b;
};
我希望使用clear() 方法来完成。但是当我执行以下代码时:
A *a = new B();
delete a;
我明白了:
构造 A 构造 B 破坏 B 破坏 A 清除 A
而且clear B 永远不会被打印出来。
我做错了什么?
【问题讨论】:
标签: c++ memory-management memory-leaks destructor