我有一些共享指针shared_ptr<T> pointer1(new T(1));
。
现在,在代码的其他部分,我有pointer2
的显式副本(猜测它会存储在std::map
或其他容器中)。假设副本像map.insert(make_pair(key1, pointer1));
一样完成。
我仅使用第二个副本来预先缓存某些数据,这意味着如果主指针已经无效,则无需存储第二个指针。 在这种情况下我该怎么办?
如果我知道pointer1
在我的代码的其他部分变得无效,有没有办法强制第二个指针的内存释放?
或者我应该采取丑陋的方式 - 不时检查我的地图是否有ptr.unique()
设置为true
并破坏它们的指针?
也许有一些替代/建议?
std::map<int, shared_ptr<int> > map;
{
shared_ptr<int> pointer1(new int(5));
map.insert(std::make_pair(0, pointer1));
}
在这些操作发生后,是否有任何方法/技巧使地图包含<0, shared_ptr[NULL]>
而不是<0, shared_ptr[5]>
?
由于
答案 0 :(得分:1)
听起来这是weak_ptr的任务:
http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/weak_ptr.htm
尝试将它们放在您的表中而不是shared_ptr。
答案 1 :(得分:1)
我只使用第二个副本来预先缓存一些数据,这意味着如果主指针已经无效,则不需要存储第二个指针。在这种情况下我该怎么做?
你应该看一下boost :: weak_ptr 如果关联的shared_ptr已被重置,则weak_ptr知道它。
如果我知道我的代码的其他部分中的pointer1变得无效,有没有办法强制第二个指针的内存释放?
不要这么认为 但是如果使用弱指针,则不需要这样做。