【发布时间】:2020-07-31 05:39:12
【问题描述】:
我正在尝试了解一些关于std::weak_ptr(语义和用例)的知识,但是我在网上找不到很多资源。 Cppreference 没有太大帮助,还有一些其他网站,但它们也没有真正的帮助。
提前谢谢你!
【问题讨论】:
-
你对他们有什么不了解?
-
@AlanBirtles 基本上没有。我知道当没有
strong_ptr指向它时,weak_ptr指向的对象将被销毁,仅此而已。我真的找不到任何好的例子,什么时候使用它的语法(如何检查它指向的值是否仍然存在等) -
要知道的就这些?
-
也许它应该得到一个真正的答案,但已经关闭。
weak_ptr主要用于观察者或打破循环依赖。观察者希望能够打印对象的状态如果它仍在其他地方使用,并且只知道它不再被使用。 weak_ptr 允许对象被销毁。lock如果对象仍然存在,则从中提取shared_ptr,如果对象已过期,则返回默认的shared_ptr(实际上指向 NULL)。 cppreference std::weak_ptr.lock 包含代码示例... -
...另一个可能的用例是打破参考周期。如果 A 有一个指向 B、B 指向 C 和 C 指向 A 的共享指针,那么任何对象都不会被销毁,因为它们每个都有一个所有者。如果其中一个指针变弱,当不再需要对象时,weak_ptr 指向的指针将被销毁,并从那里销毁整个链。只需在使用之前从
weak_ptr和lock获得一个临时的shared_ptr,就像观察者所做的那样。
标签: c++ smart-pointers weak-ptr