坑收集(cpp)

2019-03-17  本文已影响0人  _伦_

1、使用容器加智能指针的一个坑:

假设有两个容器声明如下:

map<int, shared_ptr<set<int> > > earthMap;

list<shared_ptr<set<int> > > nearByEarths;

某个时候,我要把容器earthMap的东西删掉,放到nearByEarths中,然后写下了下面的语句:

earthMap.erase(posInt(i - 1, j)); ---(1-1)

nearByEarths.push_back(earthMap[posInt(i - 1, j)]); ---(1-2)

过了一会,需要遍历nearByEarths的内容,发现报错。

问题应该是这样的,在1-1中,由于容器已经把最后一个指向某个对象的shared_ptr销毁了,因此这个对象也随之被销毁。因此后面访问就会出错。

但是还有个问题,为什么1-2不会报错呢?这个留待后续思考

上一篇下一篇

猜你喜欢

热点阅读