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

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

オブジェクトを返す

引き続き本を読みながら勉強中。
オブジェクトを返す関数がある場合。

#include <iostream>
using namespace std;

class Test {
public:
    Test() { cout << "Constructor\n"; }
    ~Test() { cout << "Destructor\n"; }
};

Test func()
{
    Test t;
    return t;
}

int main()
{
    Test t;
    t = func();
    return 0;
}

実行結果は次の通り。

Constructor
Constructor
Destructor
Destructor
Destructor

ある関数でローカル変数としてオブジェクトを作って、それを関数の戻り値とした場合、自動的に戻り値を保持する一時的なオブジェクトが作られる。
この一時的なオブジェクトが作られることはまったく知らなかった。デストラクタ内でメモリ解放のような処理をしていたら正しく動作しなくなってしまう。これも昨日の日記のようにコピーコンストラクタを使えば解決できる。