你这个Item属于不符合C++模式的类,出问题是迟早的。
【 在 thinkgrass (虎儿) 的大作中提到: 】
: 标 题: 今天被C++的stl vector 自动扩大空间坑了
: 发信站: 水木社区 (Tue Nov 10 17:05:01 2020), 站内
:
: 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的容器么。。。
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 61.48.14.*]
--
FROM 76.126.252.*