我在c ++中有一些Base
类。我使用boost :: python将它导出到python中。但是虚拟析构函数呢?任何基类都应该有虚拟析构函数,以避免错误的内存释放,对吧?我忘记了这一点并写了Base
没有析构函数。一切正常,但内存泄漏很多。
现在我已添加:
class Base
{
public:
virtual ~Base();
// Other members...
};
在python中导入我的模块后,我收到一个错误:
ImportError:Base.so:undefined 符号:_ZTI6Base
我做错了什么?而且,据我所知,错误是由于缺少py-module的析构函数导出器而引起的。
答案 0 :(得分:2)
缺少的符号错误可能是由于您未能定义析构函数(您正在声明析构函数,但是您的问题不清楚是否< em>定义它):
class Base
{
public:
virtual ~Base() {}
// Other members...
};
(注意添加的花括号)
关于每个“基类是否应该有虚拟析构函数以避免错误的内存释放”的问题,请查看常见问题解答:http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7
答案 1 :(得分:0)
你可以做到
class Base
{
public:
virtual ~Base() {}
// Other members...
};
确保定义析构函数