C++では関数にオブジェクトを渡したり関数からオブジェクトを受け取る場合は値渡しされる。つまり、オブジェクトを渡すごとにオブジェクトのコピーが発生し効率が悪いです。
例えば以下のコードでは実行ごとにコピーが発生し思わぬパフォーマンス低下をもたらすことがあります。
void func(Hoge hoge); // 実行ごとにHogeオブジェクトがコピーされる
コピーの発生を抑えるにはポインタ
void func(Hoge *hoge); // ポインタ渡し
もしくは参照
void func(Hoge &hoge); // 参照渡し
で渡す必要がある。
渡すオブジェクトを変更する場合はポインタ渡し、変更しない場合はconst参照渡しを行うのがよい。
一般に値渡しをしても効率が悪くないのは
- 組み込み型
- STLのiterator
- 関数オブジェクト
だけで、それ以外はconst参照渡しを行うのがよい。
参考文献
Effective C++ 第3版, スコット・メイヤーズ著