C++ 智能指针

概述

智能指针是C++11引入的RAII(资源获取即初始化)工具,用于自动管理动态内存,防止内存泄漏。位于 <memory>头文件中。

主要类型

1. std::unique_ptr<T>

  • 独占所有权:同一时间只有一个智能指针可拥有该对象

  • 不可复制,但支持移动语义

  • 适用于单一所有权的资源管理

复制代码
复制代码
复制代码
std::unique_ptr<MyClass> ptr(new MyClass());
auto ptr2 = std::make_unique<MyClass>(); // C++14推荐

2. std::shared_ptr<T>

  • 共享所有权:多个指针共享同一对象,引用计数为0时自动释放

  • 支持复制和移动

  • 有少量性能开销(引用计数管理)

复制代码
复制代码
复制代码
auto ptr = std::make_shared<MyClass>();
std::shared_ptr<MyClass> ptr2 = ptr; // 引用计数+1

3. std::weak_ptr<T>

  • 弱引用:不增加引用计数,不拥有对象所有权

  • 解决shared_ptr循环引用问题

  • 需通过lock()转换为shared_ptr后使用

复制代码
复制代码
复制代码
std::weak_ptr<MyClass> weak = sharedPtr;
if(auto sp = weak.lock()) {
    // 使用sp
}

使用建议

  1. 优先使用make_unique/make_shared,更安全高效

  2. 默认使用unique_ptr,需要共享时再用shared_ptr

  3. 循环引用场景使用weak_ptr打破循环

  4. 避免裸指针与智能指针混用

  5. 明确所有权语义,选择合适指针类型

内存安全

智能指针自动释放内存,显著减少内存泄漏和悬空指针问题,是现代C++资源管理的核心工具。

相关推荐
讳疾忌医丶1 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
2401_868534781 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
软件课代表CiCi1 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
蒸蒸yyyyzwd3 小时前
从面经中学到的三件事
c++·笔记
时时三省3 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
ThornArmor5 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
Elsa️7467 小时前
算法一周刷题总结
c++·算法
风合星语7 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!7 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
welfare9628 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++