发布网友 发布时间:2024-09-30 15:05
共1个回答
热心网友 时间:2024-09-30 18:47
C++17标准中的智能指针,如shared_ptr,主要用于管理和控制对象的生命周期,尤其在多所有者场景下。本文仅对其做基础介绍。
shared_ptr是一种智能指针类型,它允许多个所有者共同维护对象的生存状态。使用shared_ptr时,可以通过添加删除器和分配器,但这些内容将在后续笔记中探讨。
当且仅当以下条件满足时,shared_ptr会销毁其所管理的对象:...
shared_ptr中包含element_type(C++17后为std::remove_extent)和weak_ptr类型。其内部结构包括指向对象和控制块的指针,基于__shared_count类。
shared_ptr的关键方法包括get()、use_count()、unique()、reset()和swap(ptr)等。
尽管shared_ptr提供get()获取指针,但需谨慎使用,避免野指针。直接用指针构造shared_ptr可能导致资源重复删除,不建议。
相比之下,weak_ptr更加简单,它不直接控制对象,仅作为shared_ptr的弱引用。使用weak_ptr时,它不会改变shared_ptr的引用计数。
weak_ptr的典型操作有reset()、use_count()、expired()和lock(),它们在弱引用管理上各有特色。
weak_ptr有助于避免循环引用导致的内存问题,以及在缓存和观察者模式中的合理使用。
__shared_count和__shared_weak_count分别用于强引用和弱引用计数,后者添加了add_weak方法以处理弱引用。
remove_extent是移除数组维度的类型工具,用于简化类型转换。