0

我有一些共享指针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]>在这些操作发生之后?

谢谢

4

2 回答 2

1

听起来这是weak_ptr的任务:

http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/weak_ptr.htm

尝试将它们放在您的表中而不是 shared_ptr 中。

于 2010-07-12T21:55:55.577 回答
1

我只使用第二个副本来预缓存一些数据,这意味着如果主指针已经无效,则不需要存储第二个指针。在这种情况下我该怎么办?

您应该查看 boost::weak_ptr 如果关联的 shared_ptr 已被重置,那么 weak_ptr 知道它。

如果我知道 pointer1 在我的代码的其他部分变得无效,有什么方法可以强制为第二个指针释放内存?

不要这么想。
但是如果你使用弱指针,这将不是必需的。

于 2010-07-12T21:58:53.773 回答