はじめてのSWIG5 (引数の受け渡しとか)

下のようなパターンではまる

実装

public:
    unsigned int makeDictionary(char** list) {
        this->list = list;
    }
    void search(const char* text) {
       this->listを参照してあれこれ
    }

使用(Perlから)

    hige->makeDictionary($wordlist);
   hige->search("I LOVE U");

Perlから渡った、$wordlist のコピー?がの寿命が、makeDictionaryの中だけっぽいのだ。
つまり hige->search を呼んだときには、$wordlistのコピー?は回収されてしまう様子。
この動作は確かに正しい気がするな。


たぶん .i のなかで指定している typemap がその処理をやっているんだろう。
見つけた。

// This cleans up the char ** array after the function call
%typemap(freearg) char ** {
	free($1);
}


SWIGGERな皆さんは、どんなtypemapを使っていますでしょうか?