0

得到几个错误,它是一个带有非虚拟析构函数的虚拟函数。我该如何解决这个错误?它在 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;
    }
};
4

1 回答 1

4

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

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

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

virtual ~container();

在您的类声明中并在 .cpp 文件中实施析构函数应该可以解决您的问题。

于 2012-01-27T08:34:23.217 回答