最近写一个入门级别的聊天室程序的时候
用到动态分配空间,第一联想到的就是vector容器
但是客户端连接的时候经常出崩溃的现象
经过排查,原来是传递了容器指针!
查资料才知道,当添加新的数据进去的时候
vector容器在重新分配空间时它会做这样的动作:
首先,vector 会申请一块更大的内存块;
然后,将原来的数据拷贝到新的内存块中;
其次,销毁掉原内存块中的对象(调用对象的析构函数);
最后,将原来的内存空间释放掉。
下面是 简单的代码和最后的结果
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> vs;
vs.push_back(1);
cout<<&vs[0]<<endl;
vs.push_back(2);
cout<<&vs[0]<<" "<<&vs[1]<<endl;
list<int> vv;
vv.push_back(1);
cout<<&vv.front()<<endl;
vv.push_back(2);
cout<<&vv.front()<<" " <<&vv.back() <<endl;
vv.clear();
vs.clear();
return 0;
}
vector容器添加数据的时候,原来的地址会改变,所以想要调用,只能使用vs[0],这种方式
而list不会出现地址改变,因为它的内存的分开的
却没有vector使用的灵活!