0

Lua & luabind を初めて使用しており、以下の問題について疑問に思っています。C++ でシングルトン クラスを宣言し、それを Lua にバインドすると、そのインスタンスを取得していくつかのメソッドを呼び出すと、どの言語が実際にインスタンスを所有するのでしょうか?

私が疑問に思っている理由は、現時点では、私のプログラムがシングルトン クラスのデストラクタでセグメンテーション違反を起こすことがあるからです。インスタンスがすでに破棄された後、Lua はそれをガベージ コレクションしようとしていますか? もしそうなら、どうすればそれを防ぐことができますか? 宣言は次のとおりです。

public:
        static App* GetInstance();
        ~App();
        void Execute();

    private:
        App();

Luaで私が呼び出す

app = App.getInstance()
app:execute()

すべてが終了すると、クラッシュします。ここで正確に何が起こっているのですか?

luabind はこんな感じです(多くのプロパティは省略されています)

module(L, "nge")
[
        class_<App>("App")
            .scope
            [
                def("getInstance", &App::GetInstance)
            ]
            .def("execute", &App::Execute)
]
4

1 に答える 1

0

ネイキッドポインターを返すため、ライフタイムに注意する必要があります。Luabind がインスタンスを削除している可能性があります。おそらく、インスタンスに shared_ptr を使用するように切り替える必要があります。Luabind はそれを行うことができます: http://www.rasterbar.com/products/luabind/docs.html#smart-pointersLuaBridge のドキュメントには、問題を理解するのに役立つ良い章があります。

于 2013-06-07T10:07:15.457 に答える