什么时候用智能指针?什么时候用裸指针?

✅ 智能指针(推荐在大多数现代C++代码中使用)

适用于以下场景:

  1. 需要自动管理资源生命周期

    避免手动 new / delete,由RAII机制自动释放。

  2. 防止内存泄漏

    尤其在函数提前返回、循环嵌套等复杂控制流中。

  3. 管理复杂对象的所有权和生命周期

    std::unique_ptr(独占所有权)、std::shared_ptr(共享所有权)、std::weak_ptr(打破循环引用)。

  4. 确保异常安全

    即使发生异常,智能指针析构函数仍会正确释放资源,避免资源泄漏。

📌 典型例子:工厂函数返回对象、容器内存储多态基类指针、跨模块共享资源。


🔍 裸指针(仅在非常明确且受限的场景下使用)

适用于以下场景:

  1. 简单的、临时的、不涉及所有权的对象

    例如函数内部对一个已存在对象的观察或访问(非拥有型指针)。

  2. 对性能开销要求极高的场景

    智能指针(尤其是 shared_ptr)的控制块有额外内存和原子操作开销;裸指针无任何额外负担。

  3. 不需要管理资源生命周期的场景

    仅用来传递或引用某块内存,而该内存由其它机制(如栈、全局、智能指针)负责释放。

⚠️ 警告:裸指针不表达所有权,必须确保其所指对象的寿命长于指针本身,否则会产生悬垂指针。


✨ 核心原则总结

维度 智能指针 裸指针
所有权 明确(独占/共享) 无所有权(仅观察)
生命周期管理 自动 手动(需保证对象有效)
异常安全 安全 不安全(需额外编码)
开销 有额外内存/CPU开销 几乎为零
推荐度 默认首选 仅限性能关键或极简单场景

💡 现代C++实践:优先使用智能指针表达所有权;仅在需要"非拥有型引用"或与旧C接口交互时使用裸指针。

【C语言/C++】知识点精讲:指针

相关推荐
不正经学生29 分钟前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技38 分钟前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
恋恋西风3 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx3 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_4 小时前
C++(22)——类型转换和IO流
开发语言·c++
yi.Ist4 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
xiaobobo33304 小时前
c语言中for循环条件中定义临时栈变量的作用域
c语言·for循环条件定义栈变量·大括号作用域·独立栈变量
惜离殇5 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
青梅味猪大肠7 小时前
【深入浅出C++】为什么虚表指针可以解决菱形继承
开发语言·c++