【发布时间】:2012-07-17 23:24:25
【问题描述】:
我正在尝试调试一个程序,这样做与我对 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() 函数(我已经知道)的对象的副本,然后是其余的先前存在的元素也会从前面开始复制到新向量中。
我对流程的理解是否正确?
【问题讨论】: