读书人

vector里插入类的对象有关问题

发布时间: 2013-03-22 09:49:50 作者: rapoo

vector里插入类的对象问题。
#include<iostream>
#include <vector>
#include <fstream>
using namespace std;
ofstream out("1.txt");
class Rock{
public:
Rock(){out <<"Rock()"<<endl;}
Rock(const Rock&){out <<"const Rock&()"<<endl;}
~Rock(){out <<"~Rock()"<<endl;}
};

int main()
{
Rock a;
Rock b;
Rock c;
vector<Rock>v;
v.push_back(a);
v.push_back(b);
v.push_back(c);
return 0;
}
运行结果为:
Rock()
Rock()
Rock()
const Rock&()
const Rock&()
const Rock&()
~Rock()
const Rock&()
const Rock&()
const Rock&()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
看不懂。。
vector 拷贝构造函数
[解决办法]
去看看insert的源码估计会有所收获
[解决办法]
你单步调试就不难发现:
第一次插入 const Rock&()出现一次
第二次插入 const Rock&()出现2次

你多弄几个插入就明白了。
每次插入vector会对容器里面的元素就行调整会设计到对象的拷贝...
我认为是这样!
[解决办法]
应该是插入向量的时候会拷贝一份、你在vector释放的时候也会拷贝出来销毁 所有对象拷贝会多次调用

你可以试着定义:vector<Rock *>v; 这样就不会出现拷贝函数被调用了。

读书人网 >C++

热点推荐