虚拟析构函数
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++认为既然类中有虚拟方法,就应该有一个虚拟析构函数。这与如果你继承并扩展一个类有关,你可能会分配基类析构函数不知道要清理的内存或其他资源,如果你的析构函数不是虚拟的,在某些情况下可能会调用基类的析构因子,而不是真正的析构器。
经验法则是,如果类中有虚拟方法,则使用虚拟析构函数。删除名称不正确的析构函数~队列并放入
virtual ~container();
在类声明中,并在.cpp文件中实现析构函数应该可以解决您的问题。
相关文章:
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- "虚拟""覆盖"析构函数
- 程序永远不会进入虚拟析构函数
- C++ std::vector 中的虚拟析构函数继承
- 哪种方法更适合处理虚拟析构函数?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 带有未解析外部元素的C++虚拟析构函数
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 从内部类的析构函数调用虚拟函数
- C++切片和虚拟析构函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 添加虚拟析构函数会使代码大小膨胀
- 应该是虚拟析构函数吗?但是怎么做呢?
- 虚拟析构函数将对象移出 rodata 部分
- 为什么虚拟类的析构函数不会自动添加到 vtable 中?
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- DIRECTX9 中自定义顶点的虚拟析构函数
- 声明析构函数虚拟就足够了吗?