こんにちは、akiです。
一般的にオブジェクトのインスタンス生成にはコストが掛かる(≒時間がかかる)と言われます。
そこで、予め生成しておいたインスタンスを保管しておき、使いたいときに取り出せる仕組みをオブジェクトプールと呼びます。インスタンスを都度生成する必要が無いため、CPUに優しい仕組みというわけです。
環境にもよりますが、ゲームなどでは、一度に生成するオブジェクトが数百程度になる場合はオブジェクトプールを使用するのが良いと思います。
オブジェクトプールの作り方
オブジェクト(クラス)の宣言
class TestClass{ int num; std::string str; };
オブジェクトプールの宣言
std::list<TestClass*> objPool;
インスタンスの生成とオブジェクトプールへの格納
// 必要な数だけオブジェクトを生成する for(int i = 0; i < 10; i++){ TestClass* testClass = new TestClass(); // オブジェクトプールへ格納 objPool.push_back(testClass); }
オブジェクトプールの使い方
オブジェクトプールからオブジェクトを取り出す
// オブジェクトプールが空の場合はエラーハンドリングする if(objPool.empty()){ // error Handling } // オブジェクトプールの末尾からポインタを参照 TestClass* t = objPool.back(); // オブジェクトプールの末尾を削除 objPool.pop_back();
オブジェクトをオブジェクトプールに戻す
// 使用して不要になったオブジェクトをオブジェクトプールに戻す objPool.push_back(t);
オブジェクトプールと聞くと身構えてしまいますが、要はポインタのリストを付け外ししているだけです。簡単ですね。