动态内存与智能指针
头文件 <memory>
直接管理内存
new, delete
如果内存耗尽,new会抛出bad_alloc异常
阻止new抛出异常:
delete之后,指针变成空悬指针,指向现在已经无效的内存,将nullptr赋予指针,指明其不指向任何对象
shared_ptr和unique_ptr都支持的操作:
shared_ptr
操作:
和new结合使用:
定义和改变shared_ptr的其他方法:
释放:
get:
当发生异常终止时:
shared_ptr确保内存不需要时能够释放
通过new直接管理的内存不会自动释放
使用自己的释放操作:
unique_ptr
某个时刻只能有一个unique_ptr指向一个给定对象
操作:
不允许拷贝和赋值:
特例,从函数返回unique_ptr
weak_ptr
指向shared_ptr所管理的对象
将weak_ptr绑定到shared_ptr不会改变shared_ptr的引用计数
操作:
动态数组
初始化动态分配对象的数组:
释放:
- unique_ptr版本的动态数组:
shared_ptr不支持管理动态数组,必须提供自己定义的删除器,也不支持下标运算符
- allocator:
将分配和初始化分离