C++のコード例について少し質問があります。C++でのオブジェクト作成
vector<Cat> v;
Cat c;
v.push_back(c);
Cat d = v[0];
このコードでは、いくつのオブジェクトが作成されますか?
C++のコード例について少し質問があります。C++でのオブジェクト作成
vector<Cat> v;
Cat c;
v.push_back(c);
Cat d = v[0];
このコードでは、いくつのオブジェクトが作成されますか?
少なくとも3:
vector<Cat> v;
Cat c; // default construction
v.push_back(c); // copy construction of v[0] from c
Cat d = v[0]; // copy construction of d from v[0]
編集:それは実装になるので、それは総でが作成されたオブジェクトの数を尋ねるしても意味がありませんので、私は唯一、ここCat
オブジェクトを数えることに注意してください特定の(どのようstd::vector
が実装されているCat
は何をするのか...?)
猫のコンストラクタにいくつかのログを追加し、それを自分でテスト:
ここは私が得るものです:http://codepad.org/Pzs9kOlH
注一定の条件の下で、コンパイラは何もしないコードの塊を取り除くために自由であること。そのため、一部のコピーが削除されることがあります。非常に積極的な仮説的なコンパイラでは、コードによって何も行われず、そのような構造を完全に取り除くことができます。私のコンストラクターは出力を変更するので、コンパイラーは呼び出しを取り除くのに自由度がありません。
この宿題はありますか? –
オブジェクトの総数や 'Cat'オブジェクトの数だけに興味がありますか?例えば、 'v'をオブジェクトとして数えたいのですか、' 'v''の' Cat'オブジェクトだけを数えたいですか? –
言うことはできません。 'Cat'のデフォルトコンストラクタは何をしますか?他のオブジェクトを構成していますか?それは例外をスローすることはできますか? 'std :: exit()'を呼び出すことはできますか? 'Cat'コピーコンストラクタはどうでしょうか?それは何をするためのものか? 'std :: vector'の実装はどうですか?それが試みる割り当てのどれかが失敗する可能性はありますか?サブオブジェクトも同様にカウントする必要がありますか? –