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

(追加された中括弧に注意してください)

すべての「誤ったメモリ解放を回避するために基本クラスに仮想デストラクタが必要かどうか」に関する質問については、FAQを参照してください: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 に答える