裸指针七宗罪——为什么现代 C++ 不建议使用裸指针
总结自《Effective Modern C++》第 4 章
裸指针七宗罪
- 裸指针无法说明指向的是单个对象还是一个数组
- 裸指针无法说明使用完指针是否需要析构,即从声明中看不出来指针是否拥有所指向的对象
- 即使知道需要析构,也不知道应该用 delete 还是调用某个类似 deinit(p) 的函数
- 即使知道用 delete,也不知道用 delete 还是 delete[](见理由 1)
- 即使知道如何析构,还要保证在整个路径上,刚好只调用一次析构:少调用导致资源泄露,调用多次将产生未定义行为(如同一指针 delete 两次可能导致程序崩溃)
- 空悬指针(dangling pointer):对象已析构,但仍有指针指向它
- (我自己硬凑的)使用不便:取地址、解引用、通过
->
来访问成员,比.
多按两个键,手指移动距离远,容易按错...
解决方案
- (我自己瞎说的)能不用就不用,能用对象用对象,不要什么都无脑 new 堆上
- 智能指针:unique_ptr(默认首选), shared_ptr(除非明确需要共享所有权), weak_ptr
扩展阅读
本文作者:Zijian/TENG(微信公众号:好记性如烂笔头),转载请注明原文链接:https://www.cnblogs.com/tengzijian/p/16209803.html
分类:
C/C++
标签:
Effective Modern C++
, 裸指针
, 指针
, raw pointer
, 智能指针
, shared_ptr
, unique_ptr
, 现代C++
, Modern C++
, 原始指针
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具