【发布时间】:2011-08-03 03:46:12
【问题描述】:
我在 c++ 中有一些 Base 类。我使用 boost::python 将它导出到 python 中。但是虚拟析构函数呢?任何基类都应该有虚拟析构函数以避免错误的内存释放,对吧?我忘记了这一点,并在没有析构函数的情况下写了Base。一切正常,但有很多内存泄漏。
现在我添加了:
class Base
{
public:
virtual ~Base();
// Other members...
};
在 python 中导入我的模块后,我得到一个错误:
ImportError: Base.so: 未定义 符号:_ZTI6Base
我做错了什么?而且,据我了解,错误是由于缺少 py-module 的析构函数导出器造成的。
【问题讨论】:
-
@Ockonal:
Every Base Class should have virtual destructor不正确,除非您的基类是polymorphic -
@Ockonal:您确定将析构函数导出到导入库吗?你确定你实现了这个功能?
-
@als 听不懂你:(
polymorphic是什么意思? -
@als 我通过指向
Base的指针使用派生类。那叫polymorphic? -
@Ockonal:多态基类意味着你的基类应该至少有一个虚拟成员函数。
标签: c++ python boost virtual-destructor