Prainブログ

ゲーム開発とかIT小話とかその他雑記のブログ

*

5分でわかるプログラミング C++ オブジェクトプールの作り方と使い方

   

こんにちは、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);

 

 

オブジェクトプールと聞くと身構えてしまいますが、要はポインタのリストを付け外ししているだけです。簡単ですね。

 

 -

        

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

cocos2dx
5分でわかるプログラミング C++ 処理を引数にとる方法 functionの使い方

こんにちは、akiです。 プログラムに慣れてくると、処理そのものを引数に取りたい …

遊びを繋げ新たな地平へ プレイン Prain
5分でわかる プログラミング C++言語 ポインタとは

5分でわかる プログラミング C++言語 ポインタとは   C++言語 …