我可以从boost的weak_ptr获得一个原始指针吗?

Czu*_*aka 6 c++ boost weak-references smart-pointers shared-ptr

是否有可能从boost :: weak_ptr获取原始指针?Boost的shared_ptr有get()方法和" - >"运算符.weak_ptr背后是否有一些理由不具备相同的功能?

Jam*_*lis 16

A weak_ptr持有非拥有引用,因此它引用的对象可能不再存在.使用由a持有的原始指针本身就很危险weak_ptr.

正确的做法是推动weak_ptrshared_ptr使用weak_ptr::lock(),并从该指针.

升压weak_ptr文档解释了为什么它会是不安全的,提供get()的功能的一部分weak_ptr,并具有代码,可能会导致问题的例子.

  • @Matthieu:当然你可以*,就像你可以留下一个悬空指针,如果你明确地`删除'一个对象但保留一个指针.必须将`weak_ptr`提升为`shared_ptr`的关键在于它鼓励你按照通常用于`shared_ptr :: get`的规则正确地限定原始指针的使用范围.没有相同的方法可以正确地使用直接从`weak_ptr`获得的原始指针. (3认同)