如果您有模板化基类,如以下示例所示:
class A{
public:
A();
virtual ~A();
};
template <class T>
class B : public T
{
public:
B();
virtual ~B();
};
typedef B<A> C;
class D : public C
{
public:
D();
virtual ~D();
};
删除D的实例时,是否会调用A的析构函数?
我可能会创建一个测试程序来找出会发生什么,但只是想一想,我不确定会发生什么。
答案 0 :(得分:3)
当您删除D的实例时,将会 A的析构函数被称为?
是。这里没什么特别的(除了你对所有东西都有私人访问权限,这意味着它可能无法编译)。
答案 1 :(得分:2)
为了从两个相互矛盾的答案中得到代表,给出:
#include <iostream>
using namespace std;
class A{
public:
A() {}
virtual ~A() { cout << "~A()\n"; }
};
template <class T>
class B : public T
{
public:
B() {}
virtual ~B() {}
};
typedef B<A> C;
class D : public C
{
public:
D() {}
virtual ~D() {}
};
int main() {
D d;
}
然后是的,当然会调用A的析构函数。