- 使用方法
-
#include <memory> /* 将已经存在的指针作为构造参数 */ int *p = new int(33); auto_ptr<int> api(p); /*直接构造智能指针*/ auto_ptr<int> api(new int(33)); /*拷贝构造*/ auto_ptr<string> api1(new string("wonderful")); auto_ptr<string> api2(api1); /*一块动态内存只能由一个智能指针拥有,因此拷贝时发生控制权转移,api1失去内存拥有权,api2获得内存拥有权,且对象销毁时,由api2负责内存的自动销毁*/ /*赋值*/ auto_ptr<int> api1(new int(2048)); auto_ptr<int> api2(new int(1024)); api1 = api2; /*由api1所指向的对象被销毁,api1指向原来api2所指向的内存,其值为2048,api2不再指向原内存空间*/
- auto_ptr独占控制权,不能由两个智能指针指向同一块内存空间(原因:删除时两个对象都尝试删除一块内存,造成错误)
- auto_ptr不能作为函数参数传递,会在传参数时,将内存控制权交给局部变量(函数结束后被删除),而原来的智能指针失去它的拥有权。
-
auto_ptr
最新推荐文章于 2021-12-01 20:59:35 发布
本文详细介绍了C++智能指针auto_ptr的工作原理,包括如何将已有指针传递给它、智能指针间的控制权转移、复制构造与赋值行为。重点讲解了auto_ptr的独占控制权及其在函数参数传递和内存管理中的特性。
摘要由CSDN通过智能技术生成