1

一時オブジェクト/無駄なオブジェクトは、超低レイテンシ アプリケーションの大きなボトルネックになる可能性があります。不必要にコンストラクターを呼び出すことの落とし穴を認識しようとしているので、私が気付いていない方法があるかどうか知りたいと思っていました。コンストラクターが「サイレントに」呼び出されるときの次の方法を認識しています。

1)

//a temporary "object" is created when adding x and y and then assigned to z
int x,y,z;
z = x + y;    

2)

//A temporary object is created here when the return value is passed. Its also possible
//another temporary object is created during the assignment?
A a = my_function();

A my_function(){
    return new A();
}

3)

A a = my_function();

A my_function(){
    A a;
    return a;
}

4) 引数が値で渡される場所

A a;
my_function(a);

void my_function(A a){

}

5) 初期化子リストを使用しない:

class A{
   B b;
   C c;

   A(B bb, C cc):
   {
       this.b = bb;
       this.c = cc;
   }

}

コンストラクターが暗黙的に呼び出される他の例はありますか?

4

3 に答える 3

0

A a = A();(関数の例のより単純なケース)、最近のほとんどのコンパイラはそれを最適化して初期化を指示すると思います。(ただし、GCC にはその最適化を無効にするオプションがあります。)

ところで、http://en.wikipedia.org/wiki/Copy_constructorをご覧になることをお勧めします。

于 2013-05-29T19:22:37.987 に答える