32

以下のプログラムを検討してください。

class A
{
    public:
    A(int i)
    {
            cout<<"Called"<<endl;
    }
};

int main()
{
    vector<A> v(5,A(1));
    return 0;
}       

出力を取得しています:http://ideone.com/81XO6

 Called

5つのオブジェクトを作成している場合でも、コンストラクターが1回だけ呼び出されるのはなぜですか?コンパイラによって内部的に
どのように処理されますか?vector

4

2 に答える 2

40

クラスには2つのコンストラクターがあり、そのうちの1つだけを監視しています。指定した元の要素からコピーstd::vectorを作成して要素を作成します。そのために、この例では、クラスのコピーコンストラクターが5回呼び出されます。A

この例ののコピーコンストラクタはA、コンパイラによって暗黙的に宣言および定義されています。必要に応じて、自分で宣言して定義することができます。そこから何かを印刷すると、少なくとも5回呼び出されていることがわかります。

于 2012-07-22T06:33:19.380 に答える
12

ライン以来一度呼び出されます

vector<A> v(5,A(1)); 

コンストラクターを呼び出し、行はベクトルv(5、X)になります。

ここで、Xは、コンストラクターを呼び出した後に構築されるオブジェクトです。

その後、コピーコンストラクタが使用されます。

追加してみてください

A(const &A);

これを検証するためのクラス宣言へ。

于 2012-07-22T06:33:40.067 に答える