裸指针七宗罪——为什么现代 C++ 不建议使用裸指针

总结自《Effective Modern C++》第 4 章

裸指针七宗罪

  1. 裸指针无法说明指向的是单个对象还是一个数组
  2. 裸指针无法说明使用完指针是否需要析构,即从声明中看不出来指针是否拥有所指向的对象
  3. 即使知道需要析构,也不知道应该用 delete 还是调用某个类似 deinit(p) 的函数
  4. 即使知道用 delete,也不知道用 delete 还是 delete[](见理由 1)
  5. 即使知道如何析构,还要保证在整个路径上,刚好只调用一次析构:少调用导致资源泄露,调用多次将产生未定义行为(如同一指针 delete 两次可能导致程序崩溃)
  6. 空悬指针(dangling pointer):对象已析构,但仍有指针指向它
  7. (我自己硬凑的)使用不便:取地址、解引用、通过 -> 来访问成员,比 . 多按两个键,手指移动距离远,容易按错...

解决方案

  • (我自己瞎说的)能不用就不用,能用对象用对象,不要什么都无脑 new 堆上
  • 智能指针:unique_ptr(默认首选), shared_ptr(除非明确需要共享所有权), weak_ptr

扩展阅读

posted @   Zijian/TENG  阅读(1682)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示