析构函数与Python

1 投票
2 回答
1342 浏览
提问于 2025-04-16 15:30

我在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

撰写回答