我有一堂我知道的课会一直被拥有者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
counter
- 复制构造
weak_ptr
, 增量weak_ptr
counter
- Allow
shared_ptr
超出范围,减少shared_ptr
counter
这似乎违背了“你不用为不使用的东西付费”的理念。有没有办法让我的班级只提供weak_ptr
无需先创建shared_ptr
?
提议P0033 http://wg21.link/p0033在 2015 年 10 月的会议上被接受为 C++17,其中添加了weak_from_this http://en.cppreference.com/w/cpp/memory/enable_shared_from_this/weak_from_this到派生自的类std::enable_shared_from_this
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)