Fib*_*les 6 c++ pointers shared-ptr weak-ptr c++14
我有一门课,我知道它总是由一个人拥有std::shared_ptr.但是,传递shared_ptr或甚weak_ptr至不需要所有权或生命周期保证的函数和方法会产生不必要的开销.为了解决这个问题,我经常将原始指针传递给函数.类本身继承自std::enable_shared_from_this如此,如果函数需要获取指针的所有权,它可以使用类的方法来获取shared_ptr.
这一切都很美妙.然而,在某些情况下,我真的不想shared_ptr从原始指针创建一个,我想要的是一个weak_ptr.
从我std::shared_ptr对它的通常实现的理解,它有两个原子变量用作参考计数器; 一个shared_ptr,一个weak_ptr.
如果我拥有的只是一个指向我的类的原始指针而我想要一个weak_ptr,我必须首先创建shared_ptr并转换它.这样做意味着引用计数器会像这样改变:
shared_ptr,增加shared_ptr计数器weak_ptr,增量weak_ptr计数器shared_ptr超出范围,减少shared_ptr计数器这似乎违背了"你不为你不使用的东西买单"的想法.有没有办法让我的班级在weak_ptr没有先创建的情况下提供shared_ptr?
有没有办法让我的班级在没有首先创建shared_ptr的情况下提供weak_ptr?
不是在C++ 14中; enable_shared_from_this支持的唯一操作是创建一个shared_ptr.现在,enable_shared_from_this应该有足够的信息来weak_ptr直接构建.但是你不能从外面做,因为类没有向你公开它的实现细节.
C++ 17支持weak_ptr从enable_shared_from_this类中获取a weak_from_this.