虚拟析构函数?

时间:2012-01-27 08:29:55

标签: c++ virtual-functions virtual-destructor

得到一些错误,它是一个非虚拟析构函数的虚函数。我该如何解决这个错误?它在g ++ 4.6.x中工作,但我需要它来处理旧版本的g ++。 :(

#include <list>

template <typename T>
class container{
public:
    ~queue(){
        queuel.clear();
        queuel.~list();
    }
    virtual T func_x(){
        T temp;
        //do stuff with list<t> test
        return temp;
    }
private:
    std::list<T> test;
};

template <typename T>
class container2 : public container<T>{
public:
    virtual T func_x(){
        T temp;
        //do different stuff with list<T> test
        return temp;
    }
};

1 个答案:

答案 0 :(得分:4)

编辑:@Als有一个点,析构函数也错误地命名为您的类。更新了答案。

问题在于g ++认为既然你在类中有虚方法,你应该有一个虚析构函数。这与你有关,如果你继承一个类并扩展它,你可以分配基类析构函数不知道清理的内存或其他资源,如果你的析构函数不是虚函数,可以调用基类的析构函数在某些情况下,而不是你真正的析构函数。

经验法则是,如果您的类中有虚拟方法,请使用虚拟析构函数。删除错误命名的析构函数〜队列并放入

virtual ~container();
你的类声明中的

和强制.cpp文件中的析构函数应该可以解决你的问题。