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

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

const参照渡し

久しぶりにEffective C++を読みながら勉強の再開。第4章20項。
関数にオブジェクトを渡すときは値渡しよりもconst参照渡しを使うほうが良い。値渡しではオブジェクトのコピーが行われるためコンストラクタやデストラクタが実行されることになる。const参照渡しなら新しいオブジェクトの生成が行われないため効率が良い。
またconst参照渡しにすると「スライス問題」も避けることができる。スライス問題とは派生クラスのオブジェクトを基底クラスの引数を持つ関数に渡すと派生クラスの部分が切り捨てられてしまうこと。つまり仮想関数でオーバーライドした部分がなくなってしまう。これもconst参照渡しにすれば仮想関数はそのままオーバーライドしたものとなる。

class Test;
void Func(const Test& t); // 参照渡し

ただし、値渡しでも効率が悪く無いものもある。組み込み型やSTLの反復子・関数オブジェクト。これらは普通、値渡しで良い。