RVO(Return Value Optimization) ― 2009/04/07 22:16
C++ では、俗に言う戻り値の最適化があります。これは、戻り値のコピー渡しによる非効率を避けるための方法です。その流れで、以下のようなコードを見つけました。
using namespace std;
class AAA{ public: AAA(){ cout << "AAA" << endl; } ~AAA(){ cout << "BYE" << endl; } };
void foo( AAA aaa ){
cout <<"FOO END" << endl; }
int main() { foo( AAA() ); // ここがポイント } AAA() と書いてあるところがポイントでこれをすることで、コピー渡しとはならずに、foo関数の引数を直接作成することができるそうです。ただ、このサンプルを動作させると、何故か、クラスAAAのデストラクタが2回呼び出されてしまいました(コンストラクタは1回のみ)。ううむ。不思議だ。と、非常に困っている雲でした。
最近のコメント