虚拟析构函数

virtual destructor?

本文关键字:析构函数 虚拟      更新时间:2023-10-16

得到几个错误,认为它是一个具有非虚拟析构函数的虚拟函数。如何修复此错误?它在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;
    }
};

编辑:@Als有一个点,析构函数的名称也不正确。更新答案。

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

经验法则是,如果类中有虚拟方法,则使用虚拟析构函数。删除名称不正确的析构函数~队列并放入

virtual ~container();

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