はじめての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を使っていますでしょうか?