私は現在、2D ゲーム エンジンに取り組んでおり、auto_ptr と、それらを標準コンテナーに入れてはならない方法について読みました。
私のエンジンはこの構造を持っています:
StateManager -- 多くあります --> State です。
状態は、エンジンの外側のメインで作成され、割り当てられます。コマンドで状態を変更できるように、エンジンにすべての状態のリスト/ベクトルを保存してもらいたいです。
例えば:
SomeState *test = new SomeState();
StateManager->registerState(test);
アプリケーションが終了したときにのみ状態が終了するため、このアプローチを使用できますか?
std::auto_ptr<SomeState> test(new SomeState()); StateManager->registerState(test.get());
// Inside StateManager State *activeState; // State manager then maintains a vector std::vector<State*> stateList; // and upon registerState it adds the pointer to the vector void registerState(State *state) { stateList.push_back(test); }
StateManager は、状態へのポインターのベクトルのみを維持する必要があり、所有権を取得する必要はありません。エンジンの状態を変更したい場合は、activeState ポインターを変更して、stateList ベクトルにある目的の状態を指すようにします。
これは悪いアプローチですか?