这几天碰到了一个问题:
首先用shared_ptr 指向一组数据 , 比如 struct{x , y , z}
然后我要用另外一组shared_ptr 指向其中某些xyz 来维护他们
那么该怎么办呢?
shared_ptr认为指向的内存use_count是1 , 所以直接释放资源
这就造成了结束时,第一次释放时的资源改变了 , 造成了资源释放错误...
那么怎么解决呢? boost的说明文档有如下方法
有时我们想要创建一个指向已存在对象的 shared_ptr
,所以当没有更多引用的时候,shared_ptr
也不能试图删除对象。例如,工厂函数:
shared_ptr<X> createX();
在某种情况下可能需要返回一个指向静态分配的 X
实例的指针。
解决方案是使用一个什么事情都不做的定制化删除器:
同样的技术可以用于某些已知对象的寿命比指针更长的场合。