智能指针在C语言中的应用原理详解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计7061个文字,预计阅读时间需要29分钟。
智能指针浅析:为解决C++中内存管理这个老大难问题,C++11提供了三种实用的智能指针。早期标准库中还存有一种auto_ptr,但由于设计上的缺陷,已被unique_ptr取代。
C++ 智能指针浅析为了解决 C++ 中内存管理这个老大难问题,C++ 11 中提供了三种可用的智能指针。(早期标准库中还存在一种 auto_ptr,但由于设计上的缺陷,已经被 unique_ptr 取代了)
智能指针不仅能用来管理动态内存,还能用来管理其他类型的资源,比如互斥锁、数据库连接等,这种用资源管理对象来管理资源的思想被称为 RAII。
原始指针的缺陷- 看不出来指向的是对象还是数组,也就不知道该用 delete 还是
delete[]; - 不知道用完后是否应该销毁,也就是不包含所有权的信息;
- 不知道该用 delete 还是其他方式释放该对象;
- double free;
- dangling pointers(悬空指针),即对象已经被释放了,但指针还指向它。
shared_ptr 体现的是共享的所有权(shared ownership),通俗地讲,就是这个被管理的对象可以被多个用户使用,只有所有用户都不再需要该资源时,它才可以被释放。
为了实现共享的所有权,shared_ptr 会维护一个引用计数,表示有多少 shared_ptr 指向这个被管理的对象。
简单地来说,当 shared_ptr 被拷贝时(不管是我们主动调用,还是将它作为传值参数或返回值),引用计数就会增加;当 shared_ptr 被析构时(比如离开它的作用域),引用计数就会减少。当引用计数归零时,这个被管理的对象就会被释放。
本文共计7061个文字,预计阅读时间需要29分钟。
智能指针浅析:为解决C++中内存管理这个老大难问题,C++11提供了三种实用的智能指针。早期标准库中还存有一种auto_ptr,但由于设计上的缺陷,已被unique_ptr取代。
C++ 智能指针浅析为了解决 C++ 中内存管理这个老大难问题,C++ 11 中提供了三种可用的智能指针。(早期标准库中还存在一种 auto_ptr,但由于设计上的缺陷,已经被 unique_ptr 取代了)
智能指针不仅能用来管理动态内存,还能用来管理其他类型的资源,比如互斥锁、数据库连接等,这种用资源管理对象来管理资源的思想被称为 RAII。
原始指针的缺陷- 看不出来指向的是对象还是数组,也就不知道该用 delete 还是
delete[]; - 不知道用完后是否应该销毁,也就是不包含所有权的信息;
- 不知道该用 delete 还是其他方式释放该对象;
- double free;
- dangling pointers(悬空指针),即对象已经被释放了,但指针还指向它。
shared_ptr 体现的是共享的所有权(shared ownership),通俗地讲,就是这个被管理的对象可以被多个用户使用,只有所有用户都不再需要该资源时,它才可以被释放。
为了实现共享的所有权,shared_ptr 会维护一个引用计数,表示有多少 shared_ptr 指向这个被管理的对象。
简单地来说,当 shared_ptr 被拷贝时(不管是我们主动调用,还是将它作为传值参数或返回值),引用计数就会增加;当 shared_ptr 被析构时(比如离开它的作用域),引用计数就会减少。当引用计数归零时,这个被管理的对象就会被释放。

