裸指针七宗罪——为什么现代 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 @ 2022-04-30 11:45  Zijian/TENG  阅读(1547)  评论(0编辑  收藏  举报