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

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

auto_ptrその2

あるクラスのポインタを受け取るような関数があった場合、そのクラスのオブジェクトをauto_ptrを使って作成した場合にはそのままでは渡すことができない。

class Test;

void Func(Test* p);

int main()
{
    auto_ptr<Test> pObj(new Test());
    Func(pObj); // エラー。コンパイルできない
}

auto_ptrが所持しているオブジェクトを得るにはget()を用いればよい。

    Func(pObj.get());

オブジェクトが持つメンバ関数やメンバにアクセスするときはget()を介さなくても->演算子や*演算子でアクセスできる。

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

class Test
{
public:
    void Func() {}
};

int main()
{
    auto_ptr<Test> pObj(new Test());

    pObj.get()->Func(); // このようにしなくても
    pObj->Func(); // このようにオブジェクトのメンバ関数を呼べる
    (*pObj).Func();
}