16

SWIG で Python ラッパーを作成しようとしている非常に複雑なクラスがあります。ただし、Python でアイテムのインスタンスを作成すると、メッセージを受信せずに特定のデータ メンバーを初期化できません。

>>> myVar = myModule.myDataType()
swig/python detected a memory leak of type 'MyDataType *', no destructor found.

これに対処するために私が何をする必要があるか知っている人はいますか? デストラクタを生成するために使用できるフラグはありますか?

4

2 に答える 2

12

SWIGは常にデストラクタラッパーを生成します(%nodefaultdtorディレクティブが使用されていない場合)。ただし、型について何も知らない場合は、不透明なポインターラッパーが生成され、リーク(および上記のメッセージ)が発生します。

myDataTypeSWIGで知られているタイプであることを確認してください。デバッグメッセージをオンにしてSWIGを再実行し、次のようなメッセージがないか確認します。

Nothing is known about Foo base type - Bar. Ignored

上記のようにメッセージを受信するということは、SWIGがタイプ階層を完全に認識していないため、限られた情報で動作することを意味します。これにより、dtorが生成されない可能性があります。

于 2009-05-28T13:59:41.777 に答える
-13

エラーメッセージは私にはかなり明確です。このタイプのデストラクタを定義する必要があります。

于 2009-05-28T01:37:46.720 に答える