裸指针七宗罪——为什么现代 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