【发布时间】:2017-06-14 13:15:42
【问题描述】:
考虑一下 C++11 中的这两个类:
class A
{
ArbitraryClass someInstance;
};
class B : public A
{
};
并考虑我这样使用B:
B *foo = new B;
delete foo;
据我了解,这里不会调用A 的隐式析构函数。
someInstance 在这些情况下是否仍然被销毁,因为它成为“关联”为B 的成员?还是我需要在A上声明一个虚拟析构函数来自动触发成员的销毁?
【问题讨论】:
-
"据我了解,这里不会调用 A 的隐式析构函数。"为什么你这么想?你试过了吗?如果没有虚拟析构函数,对象的静态变量类型将与所有父类型一起调用其析构函数。使用虚拟析构函数,动态对象类型将调用其析构函数及其所有父类型。
-
我想你很困惑。如果
someInstance是B的成员,而foo是A*,您的问题会更有意义(作为理解点,而不是混淆)。 -
@xaxxon 我误读了 this answer was suggesting, 混淆了
D和B类的内容——这就是我的困惑,因此是错误的陈述。这清除了一切。 -
@WhozCraig 困惑,显然有阅读障碍。 :')