Jan*_*dec 10 c++ shared-ptr c++11 enable-shared-from-this
该enable_shared_from_this助手包含被创建共享指向对象时设置的弱指针.这意味着有一个引用计数(单独分配或与使用的对象一起分配make_shared)和一个额外weak_ptr的对象.
现在为什么不简单地包含引用计数呢?shared_ptr从哑指针设置时,必须完全定义类型,因此shared_ptr构造函数或赋值运算符可以检测从中派生的类型enable_shared_from_this并使用正确的计数器,并且格式可以保持不变,因此复制无关紧要.实际上,shared_ptr已经有必要检测它来设置嵌入式weak_ptr.
首先想到的是这种方法是否可行,答案是它不会:
struct X : enable_shared_from_this {};
std::shared_ptr<X> p( new X );
std::weak_ptr<X> w( p );
p.reset(); // this deletes the object
if ( w.use_count() ) { // this needs access to the count object
// but it is gone! Undefined Behavior
Run Code Online (Sandbox Code Playgroud)
如果计数存储在对象中,那么no weak_ptr就不会超过对象,这是合同中的违规行为.整个想法weak_ptr是它们可以比对象寿命更长(如果最后一个shared_ptr超出范围,即使有对象也被删除weak_ptr)
| 归档时间: |
|
| 查看次数: |
1236 次 |
| 最近记录: |