析构函数与Python
我在C++中有一个叫做Base
的类。我用boost::python把它导入到Python中。但是,虚析构函数该怎么处理呢?任何基类都应该有虚析构函数,以避免错误的内存释放,对吧?我忘记了这一点,写了一个没有析构函数的Base
类。虽然一切都能运行,但却出现了很多内存泄漏。
现在我已经添加了:
class Base
{
public:
virtual ~Base();
// Other members...
};
但是在Python中导入我的模块后,我遇到了一个错误:
ImportError: Base.so: undefined symbol: _ZTI6Base
我哪里出错了?我理解这个错误是因为缺少导出给Python模块的析构函数。
2 个回答
0
你可以这样做
class Base
{
public:
virtual ~Base() {}
// Other members...
};
这样可以确保析构函数被定义
2
缺少符号的错误可能是因为你没有定义析构函数(你只是声明了析构函数,但从你的问题中不清楚你是否定义了它):
class Base
{
public:
virtual ~Base() {}
// Other members...
};
(注意添加的花括号)
关于你问的“每个基类是否应该有虚析构函数以避免错误释放内存”,请查看常见问题解答:http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7