代码之家  ›  专栏  ›  技术社区  ›  Mutmansky

删除时是否将调用模板参数对模板类的析构函数?

  •  0
  • Mutmansky  · 技术社区  · 14 年前

    如果您有一个模板化的基类,如下面的示例所示:

    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 回复  |  直到 14 年前
        1
  •  3
  •   jpalecek    14 年前

    当您删除一个d实例时,will 被调用的析构函数?

    对。这里没有什么特别的地方(除了您对所有内容都有私有访问权,这意味着它可能无法编译)。

        2
  •  2
  •   anon    14 年前

    为了从两个相互矛盾的答案中获得代表,给出:

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