- 前言
- unique_ptr概述
- 创建unique_ptr对象
- 创建空unique_ptr对象
- 通过堆指针创建unique_ptr对象
- 通过std::make_unique()函数创建unique_ptr对象
- unique_ptr成员函数
- unique_ptr的操作符
- 创建unique_ptr数组
- 测试代码
- 后记
本篇继续C++11智能指针学习,unique_ptr
unique_ptr概述与shared_ptr类似,unique_ptr也有自动释放空间的特性,不需要手动释放空间和删除指针。
从名字上可以看出,unique_ptr独享内部指针和内存空间的所有权,当unique_ptr对象被销毁时,其独占的内存空间和内部指针都会被释放和销毁。
同时,同一个指针不能被两个unique_ptr对象关联,否则就会出现double free问题。
创建unique_ptr对象 创建空unique_ptr对象std::unique_ptr p1();
std::unique_ptr p2(nullptr);
通过堆指针创建unique_ptr对象
std::unique_ptr p3(new int);
注意:与shared_ptr类不同,unique_ptr类没有拷贝构造函数!以下创建方法报错:
//std::unique_ptr p4(p3); //error!
注意:与shared_ptr类类似,unique_ptr类也没有构造函数隐式转换,以下创建方法报错:
//std::unique_ptr p4 = new int; // error!
通过std::make_unique()函数创建unique_ptr对象
注意:C++11没有提供make_unique函数,但C++14提供了。
std::make_unique p4 = std::make_unique(134);
unique_ptr成员函数
与shared_ptr类似,unique_ptr类也有其成员函数,并且许多功能相同。 reset(T *p)
释放当前内部指针指向的内存空间,并把指针变为nullptr;如果参数p为普通指针,则释放后把内部指针变为p。
get()
获得内部指针。
swap(std::unique_ptr &p)
把两个unique_ptr对象的内部指针做交换。
release()
切断对象与内部指针的联系,不会释放内存空间。返回内部指针,对象的内部指针变为nullptr。
get_deleter()
获得对象的删除器。
unique_ptr类重载了指针运算符*,->
std::unique_ptr p(new int(1));
*p;
也重载了赋值运算符=,但是只能用于右值为nullptr或者左值为空的情况。
std::unique_ptr pp;
pp = std::unique_ptr(new int(5));
pp = nullptr;
unique_ptr也有>,
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?