这不光是自动扩大的问题啊,vector存的东西是按拷贝语义来操作的,随用随拷,用完就丢。你这item就不是一个能安全拷贝的东西,除非你每个元素只执行放入一次的操作,其他时候都只读,这样提前分配空间才能安全。
【 在 thinkgrass 的大作中提到: 】
:
: class Item
: {
: public:
: int * p_data;
: Item(int n)
: {
: p_data=new int\[n\];
: }
: ~Item()
: {
: delete \[\] pdata;
: }
: };
: std::vector<Item> v;
: v.emplace_back(10);
: v.emplace_back(20);
: 类似这种,然后发现v\[0\]->pdata用的时候segment fault了,原来是默认的vector的capacity 是1,如果增加元素,会重新生成一个capacity是2的,然后拷贝过去,我这边没实现拷贝构造函数,默认的拷贝构造就是拷贝了p\_data的值,然后析构掉了p\_data,这样就segment fault了。
:
: 若问 stl里面还有这种自动resize的容器么。。。
:
: --
:
发自「今日水木 on 钛星」
--
修改:ble FROM 222.129.49.*
FROM 222.129.49.*