【发布时间】:2019-06-26 22:22:00
【问题描述】:
我正在尝试查看调用属于长链层次结构的类的虚拟析构函数的效果:A 类到 E 类。
奇怪的是,析构函数不会向控制台写入任何内容。我首先认为这可能正在发生,因为 main 也正在退出。因此,我将所有测试代码放在一个名为 test() 的函数中,并从 main() 中调用,所以当 test 返回时,我会看到析构函数的足迹。但是,什么都没有!控制台上没有“cout”标志出现!
#include <iostream>
using namespace std;
//A constructor cannot be virtual but a destructor can.
class A {
public:
A() {
cout << "A constructor" << endl;
}
virtual ~A() {cout << "A destructor" << endl;}
};
class B :public A {
public:
B() {
cout << "B constructor" << endl;
}
virtual ~B() {cout << "B destructor" << endl;}
};
class C :public B {
public:
C() {
cout << "C constructor" << endl;
}
virtual ~C() {cout << "C destructor" << endl;}
};
class D :public C {
public:
D() {
cout << "D constructor" << endl;
}
~D() {cout << "D destructor" << endl;}
};
class E :public D {
public:
E() {
cout << "E constructor" << endl;
}
~E() {cout << "E destructor" << endl;}
};
void test() {
cout << "Test1 begins..." << endl;
A* a1 = new D();
cout << "Test2 begins..." << endl;
A* a2 = new E();
}
int main() {
test();
return 0;
}
【问题讨论】:
-
我已回滚您对问题的更改,因为您不应该在问题中加入正确答案,因为答案不再有意义
-
好的。我结合了 David 和 Basile 的建议,它奏效了。我有 unique_ptr 变量,而不是需要 new 和 delete 的裸指针,还尝试了一个局部变量 E ee。
标签: c++ c++11 virtual virtual-destructor