C ++基本指针问题

时间:2010-07-12 21:49:49

标签: c++ shared-ptr lifetime destruction

我有一些共享指针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]>

由于

2 个答案:

答案 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变得无效,有没有办法强制第二个指针的内存释放?

不要这么认为 但是如果使用弱指针,则不需要这样做。