shared_ptr源码阅读

可以通过模板参数指定Lock_Policy

  1. class sp_counted_Base{}

    • use_count => 当减为0析构资源 dispose
    • weak_count => 当减为0 delete this; destroy释放控制区域

      二者皆为原子变量,原子操作改变值,同时使用内存屏障确保可见性 dispose一定要能被调用destroy的线程观察到

  2. class sp_counted_Ptr{} 继承了 sp_counted_Base
  3. class sp_counted_deleter{} 继承了sp_counted_Base,存储了Deleter_,使用std::addressof 1获取地址

    非常有趣,当面对模板时,传入的类型的& operator可能被重载,并非取地址的含义,因此使用这个弥补。


  1. why use std::addressof versus &: https://stackoverflow.com/que...

你可能感兴趣的:(c++)