【发布时间】:2015-03-14 06:10:48
【问题描述】:
可以这样实现:
std::shared_ptr<T> operator->() {
auto shared = lock();
if(shared == nullptr) {
throw std::bad_weak_ptr(); // or some other exception
}
return shared;
}
为什么weak_ptr的作者决定不使用operator->?(他们一定想到了)
我能想到潜在的原因,但我想知道官方原因是什么,如果存在的话。潜在原因:
- 不鼓励对多次调用额外增加/减少引用计数
- 鼓励显式锁定而不是(有些隐藏的)异常
如果您对返回的 shared_ptr 的生命周期感到困惑,请参阅this paper.
另外,有人问如果你希望它不会过期,为什么要使用weak_ptr?答案:循环。
【问题讨论】:
标签: c++ shared-ptr smart-pointers weak-ptr