ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

auto_ptr

標準ライブラリにauto_ptrというのがあるのは知っていたか、どう使うのか分からなかったので試してみた。

#include <iostream>
#include <memory>
using namespace std;

class Test
{
public:
    Test() { cout << "Test Constructor" << endl; }
    ~Test() { cout << "Test Destructor" << endl; }
    void Func() { cout << "Test Func" << endl; }
};

int main()
{
    std::auto_ptr<Test> pObj(new Test());
    pObj->Func();
}

実行結果
Test Constructor
Test Func
Test Destructor

auto_ptrは作成されるときにオブジェクトのポインタを持ち、自分が破棄されるときに自分が持っているポインタのオブジェクトも破棄してくれる。auto_ptrを使えば、newした後、deleteしなくても大丈夫。というよりもdeleteし忘れを防ぐためのもの。
便利だけど欠点もある。同じオブジェクトを複数のauto_ptrで指し示してはいけないということ。auto_ptrが破棄されるときにオブジェクトをdeleteするので、複数あると複数回deleteすることになってしまう。