weak_ptr <user_class>是无指针类型</user_class>

时间:2013-08-18 14:22:51

标签: c++ boost smart-pointers

我在项目中使用普通指针。我有一些内存问题,并改变了weak_ptr的普通指针。我有错误:

错误:' - &gt;'的基本操作数有非指针类型'boost :: weak_ptr'

为什么呢?我该怎么办?

2 个答案:

答案 0 :(得分:4)

您不想使用std::weak_ptr<T>来维护内存。实际上,它用于尽快释放内存,同时如果在其他地方使用它,则可以检索对象。根据您的所有权语义,您希望std::unique_ptr<T>用于对象的单个所有者,或std::shared_ptr<T>用于对象的共享所有权。

std::weak_ptr<T>的想法是,如果对象确实存在但您不想强烈依赖这些对象,则可能需要查找对象。也就是说,如果对象没有其他所有者,即std::shared_ptr<T>,则该对象被释放,尽管有std::weak_ptr<T>指向它。但是,std::weak_ptr<T>会获知有关正在发布的其他对象的信息。要使用std::weak_ptr<T>指向的对象,在确定它确实指向仍然存活的对象(如果引用的对象是std::shared_ptr<T>之后,需要将其转换为std::weak_ptr<T>。 1}}在将其转换为std::shared_ptr<T>时不再存在,会抛出异常。

相同的语义适用于这些类模板的Boost版本:标准类模板是在Boost版本之后建模的。

答案 1 :(得分:2)

首先,锁定weak_ptr - 如果它没有过期,你将获得适当的shared_ptr

shared_ptr<my_type> p = weak.lock();
if (p)
  p->do_something();
else
  // expired!