Skip to content

Latest commit

 

History

History
32 lines (25 loc) · 2.04 KB

File metadata and controls

32 lines (25 loc) · 2.04 KB

智能指针II

  • shared_ptr 是一个共享所有权的智能指针,允许多个指针实例共同拥有和管理同一个对象,支持引用计数机制和自动内存管理
  • 普通引用和右值引用的主要区别在于后者“暗示”可能会"窃取"资源(虽然在此程序中没有实际移动),总结如下:
特性 普通引用 (&) 右值引用 (&&)
接受参数 左值(变量名) 右值(临时对象、std::move的结果)
调用方式 func(var) func(std::move(var))func(temp_obj)
引用计数 不变 不变
语义含义 借用使用 准备转移所有权
原对象状态 保持不变 可能被"移动走"(取决于函数实现)
  • make_shared 是用于创建 shared_ptr 的模板函数,相比传统方式(如 std::shared_ptr<int> ptr(new int(42));),内存效率更高,异常安全,总结如下:
特性 make_shared shared_ptr(new T)
内存效率 高(一次分配) 低(两次分配)
异常安全 可能不安全
代码简洁 较冗长
自定义删除器 不支持 支持
内存释放 可能延迟 及时
  • shared_ptrunique_ptr 以及 weak_ptr 的区别如下:
特性 shared_ptr unique_ptr weak_ptr
所有权 共享 独占 非拥有
复制 可以 不可以 可以
引用计数 不增加计数
性能开销 较高 很低