私はプログラムをデバッグしようとしていますが、そうすることで、C ++ベクトルのpush_back()関数の理解にぶつかりました。
私の主張を説明するために、私は次の短いプログラムを書きました。
#include <iostream>
#include <vector>
#include <cstdlib>
using std::cout;
using std::endl;
using std::vector;
class Test {
private:
int mTestMember;
public:
Test(int val);
Test(const Test&);
int GetValue() const;
};
Test::Test(int val)
{
cout << "Constructor\n";
mTestMember = val;
}
Test::Test(const Test& test)
{
cout << "Copy Constructor\n";
mTestMember = test.mTestMember;
cout << "mTestMember: " << mTestMember << endl;
}
int main(){
vector<Test> tests;
tests.push_back(Test(int(5)));
cout<< endl;
tests.push_back(Test(int(6)));
cout << endl;
tests.push_back(Test(int(7)));
return(0);
}
コンパイルして実行すると、次の出力が得られます。
Constructor
Copy Constructor
mTestMember: 5
Constructor
Copy Constructor
mTestMember: 6
Copy Constructor
mTestMember: 5
Constructor
Copy Constructor
mTestMember: 7
Copy Constructor
mTestMember: 5
Copy Constructor
mTestMember: 6
push_back()関数のプロセスで、push_back()関数(私がすでに知っている)に引数として渡されたオブジェクトのコピーが実行され、その後、残りの要素が実行されたように見えます。既存のものに存在するものも、正面から新しいベクトルにコピーされます。
プロセスの理解は正しいですか?