C++唯一智能指针(make_unique/unique_ptr/reset/release/get/13.1)

使用make_unique获取一个智能指针,智能指针的类型是unique_ptr

// a不是数组,小括号里的就是值
std::unique_ptr<int> a = std::make_unique<int>(666);
std::cout << *a << std::endl;
std::cout << a << std::endl;
std::cout << "----------------" << std::endl;
// b是数组,小括号里的3表示这个数组的大小是3个int,也就是12个字节
std::unique_ptr<int[]> b = std::make_unique<int[]>(3);
b[0] = 111;
b[1] = 222;
b[2] = 333;
std::cout << b[0] << std::endl;
std::cout << b[1] << std::endl;
std::cout << b[2] << std::endl;
std::cout << b << std::endl;

智能指针的唯一性

std::unique_ptr<int> a = std::make_unique<int>(666);
//下面这行代码会报错,a内存处只允许有一个指针,不允许第二个指针再指向a
//std::unique_ptr<int> b = a;

定义一个新的变量,接受智能指针,原来的指针将被清空

std::unique_ptr<int> a = std::make_unique<int>(666);
std::cout << a << std::endl;
// 使用move方法将a的指针给b,因为智能指针的唯一性,所以a会被清空
std::unique_ptr<int> b= std::move(a);
std::cout << b << std::endl;
// 打印出0
std::cout << a << std::endl;

reset释放智能指针

std::unique_ptr<int> a = std::make_unique<int>(666);
//释放内存,同时将a置0,所以不会出现悬挂指针的问题
a.reset();
std::cout << a << std::endl;

get获取原始指针

std::unique_ptr<int> a = std::make_unique<int>(666);
int* b = a.get();
std::cout << b << std::endl;

release将指针置0

std::unique_ptr<int> a = std::make_unique<int>(666);
// 虽然这个函数名叫release,但是并不会真的释放内存,只是把指针置0
// 而原来的那片装着666的内存依然存在,但是该函数会返回装着666的内存地址
// 综上:相当于先get,然后再reset
int* b = a.release();
std::cout << a << std::endl;
std::cout << b << std::endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值