这是我发现的向量问题的一个小例子。你在向量内推送的对象越多,得到的构造函数和析构函数语句就越多。我期待在向量中推送一个对象时只有一个副本,但看起来在向量内部发生了移位复制。
#include <iostream>
#include <vector>
using namespace std;
class What
{
int i;
public:
What(int inter) : i(inter) {}
What(const What &w) : i(w.i)
{
static int a = 1;
cout << "i am constructor # " << a << "; with value i = " << i << endl;
++a;
}
~What()
{
cout << "i am destructor #" << i << endl;
}
};
class Whatever
{
vector<What> w;
public:
void push(What &what)
{
w.push_back(what);
}
};
int main()
{
What w1{1};
What w2{2};
What w3{3};
Whatever ever;
ever.push(w1);
ever.push(w2);
ever.push(w3);
}
结果:
我是构造函数#1;值i = 1
我是构造函数#2;值i = 2
我是构造函数#3;值i = 1
我是析构者#1
我是构造函数#4;值i = 3
我是构造函数#5;值i = 1
我是构造函数#6;值i = 2
我是析构者#1
我是析构者#2
我是析构者#1
我是析构者#2
我是析构者#3
我是析构者#3
我是析构者#2
我是析构者#1