公式リリースは古く、boost の最新バージョンではコンパイルされないため、現在 luabind、具体的にはhttps://github.com/rpavlik/luabindを使用しています。
ネット上のどこにも見つからない、非常に奇妙な問題が発生しています。ケースを非常に単純なシナリオに減らすことができました。
1 つのモジュールには、次のものがあります。
luabind::object value;
void functionA() {
lua_pushstring(L,"yo");
luabind::object temp(luabind::from_stack(L,-1));
value = temp;
}
別のモジュールでは、次のようになります。
void functionB() {
printf("My Value: %s\n",luabind::object_cast<const char*>(value));
printf("My Original value type: %d\n",luabind::type(value));
value.push(L);
luabind::object a1(luabind::from_stack(L,-1));
printf("My Copy value type: %d\n",luabind::type(a1));
}
lua から functionA と functionB を使用できるようにして、それらを連続して呼び出すと、出力は次のようになります。
My Value: yo
My Original value type: 4
My Copy value type: 0
ご覧のとおり、オブジェクトはまだ luabind が出力できるものを参照しています。しかし、それをスタックにプッシュして、スタック オブジェクトから新しいオブジェクトを作成しようとすると、値が nil になります。
これは、この特定のケースでのみ発生します。すべてを 1 つの関数に入れると、問題なく動作します。コードを同じモジュールの関数に入れると、正常に動作します。私はまだスタンドアロンのテスト プロジェクトを作成していませんが、コード内で干渉するものは何も考えられません。関数は lua から直接連続して呼び出されます。
私は何か間違ったことをしていますか?それともこれはバグですか?もしそれがバグなら、なぜ私はこのようなことを聞いたことがないのでしょうか?