weak_ptr<User_Class>为无指针类型



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

错误:"->"的基操作数具有非指针类型"boost::weak_ptr"

为什么?我该怎么办?

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

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

您不希望使用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::shared_ptr<T>时,从std::weak_ptr<T>引用的对象不再存在,则会引发异常)。

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

相关内容

  • 没有找到相关文章

最新更新