繁体   English   中英

虚拟析构函数?

[英]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;
    }
};

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

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

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

virtual ~container();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM