SDL 2.0 を使用して簡単なゲームを書きたいと思います。その構造は次のようになります。
- コンストラクタで SDL(SDL.Init() ) を初期化し、デストラクタで SDL_Quit() を呼び出し、Window と Texture のインスタンスを含むクラス Engine
- class Texture - SDL_Texture* のラッパー クラス。作成時にテクスチャを作成し、デストラクタでテクスチャを破棄する
- class Window - SDL_Window のラッパー クラスで、最初に SDL_Window* と SDL_Renderer* を作成し、デストラクタで削除します。
さて、私の知る限り、SDL_Quit() は dll をアンロードし、すべてのサブシステムを閉じます。私の理解が正しければ、SDL_Quit() を呼び出しても、SDL_DestroyWindow()、SDL_DestroyRenderer()、および SDL_DestroyTexture() を呼び出しても、何の効果も原因もありません。システムが dll と同様にアンロードされているため、バグです。
したがって、SDL_Quit() が呼び出される前に、Engine のデストラクタの最初で、Engine 内の Texture と Window が破棄されることを望みます。
単純なクラスの例でシミュレートしようとすると、単純な LIFO 応答が得られました。
ClassOne オブジェクトの初期化
ClassTwo オブジェクトの初期化
集約オブジェクトが初期化されました
集約オブジェクトが破棄されました
ClassTwo オブジェクトの破壊
ClassOne オブジェクトの破壊
そして、それは私が望むものではありません。ポインターと動的メモリ割り当てを使用して、問題を解決することができました。Aggregate のコンストラクターで演算子 new を使用してそれらを作成し、デストラクターで演算子 delete を使用してそれらを破棄するだけです。
しかし、ポインタを使わずにそれを行う他の方法はありますか? 前もって感謝します。