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不会报错呢?这个留待后续思考
网友评论