1.shared_ptr 1.1 shared_ptr介绍 shared_ptr主要用于托管动态分配的内存。 在程序中动态分配了一块内存,这块内存可以是变量可以是对象,为了避免内存泄露,我们必须在整个程序的所有可能跑到的分支,保证这块内存不用了之后可以得到正确的释放。 普通指针使用起来麻烦,而且使用不当还很有可能出现程序崩溃,比如指针未释放导...
shared_ptr,是让东西可以安全地被多人共享,自动帮你收拾残局。unique_ptr,是一个轻便高效的方式,确...
二、shared_ptr 2.1、shared_ptr内存模型 2.2、shared_ptr使用场景 2.3、shared_ptr的基本使用和常用函数 2.3.1、初始化 make_shared / reset 2.3.2、获取原始指针 get() 2.3.3、指定删除器 2.4、shared_ptr使用要注意的问题 三、unique_ptr 3.1、unique_ptr是一个独占型的智能指针 3.2、std::move(...)转...
unique_ptr和shared_ptr是C++智能指针家族中的两大支柱,它们各自适用于不同的场景。正确使用它们不仅能够有效避免内存泄漏,还能简化资源管理,提升代码的安全性和可维护性。通过了解它们的工作原理、识别常见问题和易错点,并采取相应的避免策略,开发者可以更加高效地利用智能指针的强大功能,构建高质量的C++应用程序。 我正...
在需要共享但不参与所有权的场景中使用std::weak_ptr。 std::unique_ptr和std::shared_ptr是C++中管理动态内存的强大工具。正确使用这些智能指针可以大大减少内存泄漏的风险,提高代码的安全性和可维护性。理解它们的特性和适用场景对于编写高质量的C++程序至关重要。
与std::make_shared一起使用可以提高效率和减少内存碎片。 3. std::weak_ptr (C++11) 原理与特点: 提供对std::shared_ptr管理对象的弱引用,不增加引用计数。 可以检查所指向的对象是否仍然存活(未被删除)。 通过调用lock()方法临时获取一个可访问对象的shared_ptr,如果对象已被删除,则返回空shared_ptr。
C++11智能指针unique_ptr用法使用场景分析 一、概述 C++ 标准模板库 STL(Standard Template Library) 一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,其中 auto_ptr 是 C++98 提出的,C++11 已将其摒弃,并提出了 unique_ptr 替代 auto_ptr。虽然 auto_ptr 已被摒弃,但在实际项目...
适用场景: 用于实现共享所有权的资源管理,如共享数据或缓存。 用于实现循环引用的数据结构,如图或双向链表(需配合std::weak_ptr使用以避免内存泄漏)。 用于实现 observer 模式,观察者使用std::shared_ptr来共享对被观察对象的访问。 示例代码: #include<iostream>#include<memory>voidprocessResource(std::shared_ptr...
对于大部分情况,std::unique_ptr是首选,它提供零成本的内存管理,且一次只能由一个变量持有。独特之处在于,它在单一持有场景中非常适用,许多常见情形下都能应用。即便存在看似不适用于unique_ptr的场景,稍加优化代码也能将其转换为使用unique_ptr。shared_ptr虽然提供便利的内存管理,但使用时需注意...
具体来说,当两个对象相互持有shared_ptr时,它们的引用计数始终大于0,因此它们所指向的内存块永远不会被释放。即使程序使用结束,这部分内存也无法回收,造成了内存泄漏的问题。 循环引用问题的实际场景可能是两个对象之间存在双向关联,比如A对象持有shared_ptr指向B对象,而B对象也持有shared_ptr指向A对象。当这两个对象...