0

gdb で私のプログラムをステップ実行すると、108 行目で呼び出し元の関数に戻り、クラス A のコピー コンストラクターが呼び出されません。

template <class S> class A{
    //etc...
    A( const A & old ){
        //do stuff...
    }
    //etc...
};

template <class T> class B{
    //etc...
    A<T> ReturnsAnA(){
        A<T> result;
        // do some stuff with result
        return result; //line 108
    }
    //etc...
};

ヒントはありますか?私はこれについて4時間頭を壁にぶつけましたが、ここで何が起こっているのか思いつかないようです.

4

1 に答える 1

2

(名前付き) 戻り値の最適化が有効です。コピー コンストラクターは最適化のために削除されています (これは標準で許可されていますが、動作は異なります)。

戻り値の最適化と戻り値の理解 - C++も参照してください。

(テンプレートはこれとは関係ありません。)

于 2010-04-17T06:53:08.767 に答える