模板参数的析构函数是否会在删除时调用模板化类?

时间:2010-05-13 22:17:51

标签: c++ templates destructor

如果您有模板化基类,如以下示例所示:

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的析构函数?

我可能会创建一个测试程序来找出会发生什么,但只是想一想,我不确定会发生什么。

2 个答案:

答案 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的析构函数。