プログラミング

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);

 

 

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

 

PrainGoogleAdSense

PrainGoogleAdSense

-プログラミング
-

執筆者:


comment

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

関連記事

cocos2dx

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

こんにちは、akiです。 プログラムに慣れてくると、処理そのものを引数に取りたい時が出てくると思います。そんな時は「function」を使うと便利です。     functionの …

遊びを繋げ新たな地平へ プレイン Prain

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

5分でわかる プログラミング C++言語 ポインタとは   C++言語(C言語)を始めるにあたり、ポインタでつまづくという話は良く耳にすると思います。 しかし、ポインタなんて簡単です。コンピ …