1

我有一些BaseC++ 课程。我使用 boost::python 将它导出到 python 中。但是虚拟析构函数呢?任何基类都应该有虚拟析构函数以避免错误的内存释放,对吧?我忘记了这一点,并Base没有使用析构函数进行编写。一切正常,但有很多内存泄漏。

现在我添加了:

class Base
{
   public:
      virtual ~Base();
      // Other members...
};

在 python 中导入我的模块后,我收到一个错误:

ImportError:Base.so:未定义符号:_ZTI6Base

我做错了什么?而且,据我了解,该错误是由于缺少 py-module 的析构函数导出器而导致的。

4

2 回答 2

2

缺少符号错误可能是由于您未能定义析构函数(您正在声明析构函数,但您的问题不清楚您是否正在定义它):

class Base
{
   public:
      virtual ~Base() {}
      // Other members...
};

(注意添加的花括号)

至于您关于是否每个“基类都应具有虚拟析构函数以避免错误的内存释放”的问题,请查看常见问题解答:http: //www.parashift.com/c++-faq-lite/virtual-functions.html #faq-20.7

于 2011-04-11T15:10:41.747 回答
0

你可以做

class Base
{
   public:
      virtual ~Base() {}
      // Other members...
};

确保定义了析构函数

于 2011-04-11T15:09:47.920 回答