【发布时间】:2016-10-07 08:55:51
【问题描述】:
最近我开始学习 C++11。
我研究了weak_ptr。有两种获取原始指针的方法。
-
lock()函数shared_ptr<Foo> spFoo = wpPtr.lock(); if(spFoo) { spFoo->DoSomething(); } -
expired()函数if(!wpPtr.expired()) { shared_ptr<Foo> spFoo = wpPtr.lock(); spFoo->DoSomething(); }
哪种方法更好?这两种方式有什么不同?
【问题讨论】:
-
正如其他人所说,您必须使用 1 来避免比赛。简而言之,考虑
if (auto spFoo = wpFoo.lock()) {从那时起(缺少 else 块)如果 spFoo 为 nullptr,则没有人可以访问它。
标签: c++ c++11 shared-ptr smart-pointers weak-ptr