析构函数和python

时间:2011-04-11 15:03:25

标签: c++ python boost virtual-destructor

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

现在我已添加:

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

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

  

ImportError:Base.so:undefined   符号:_ZTI6Base

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

2 个答案:

答案 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...
};

确保定义析构函数