2012-01-09 13 views
0


C++のコード例について少し質問があります。C++でのオブジェクト作成

vector<Cat> v; 
Cat c; 
v.push_back(c); 
Cat d = v[0]; 

このコードでは、いくつのオブジェクトが作成されますか?

+6

この宿題はありますか? –

+2

オブジェクトの総数や 'Cat'オブジェクトの数だけに興味がありますか?例えば、 'v'をオブジェクトとして数えたいのですか、' 'v''の' Cat'オブジェクトだけを数えたいですか? –

+4

言うことはできません。 'Cat'のデフォルトコンストラクタは何をしますか?他のオブジェクトを構成していますか?それは例外をスローすることはできますか? 'std :: exit()'を呼び出すことはできますか? 'Cat'コピーコンストラクタはどうでしょうか?それは何をするためのものか? 'std :: vector'の実装はどうですか?それが試みる割り当てのどれかが失敗する可能性はありますか?サブオブジェクトも同様にカウントする必要がありますか? –

答えて

1

少なくとも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は何をするのか...?)

1

猫のコンストラクタにいくつかのログを追加し、それを自分でテスト:

ここ

は私が得るものです:http://codepad.org/Pzs9kOlH

注一定の条件の下で、コンパイラは何もしないコードの塊を取り除くために自由であること。そのため、一部のコピーが削除されることがあります。非常に積極的な仮説的なコンパイラでは、コードによって何も行われず、そのような構造を完全に取り除くことができます。私のコンストラクターは出力を変更するので、コンパイラーは呼び出しを取り除くのに自由度がありません。

関連する問題