在C++ 11中考虑这两个类:
class A
{
ArbitraryClass someInstance;
};
class B : public A
{
};
Run Code Online (Sandbox Code Playgroud)
并考虑我这样使用B:
B *foo = new B;
delete foo;
Run Code Online (Sandbox Code Playgroud)
据我所知,隐式析构函数A不会在这里调用.
是someInstance仍然在这种情况下被破坏,因为它变成"关联"的成员B?或者我是否需要声明虚拟析构函数A以自动触发成员的销毁?
如果该类与对象的最派生类(在您的情况下也是delete如此B)不同,则在表达式的静态已知类(在您的情况下)中需要虚拟析构函数B.在你的情况下,这些类是相同的,所以你不需要虚拟析构函数:一切都被正确销毁.但是如果你已经创建了指针类型A*,那么你需要一个虚拟析构函数A来避免未定义的行为(鼻子守护进程等).