智能指针原理及实现(2)unique_ptr
2024-09-05 05:48:26
只允许基础指针的一个所有者。 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr)。 替换已弃用的 auto_ptr。 相较于 boost::scoped_ptr。 unique_ptr 小巧高效;大小等同于一个指针,支持 rvalue 引用,从而可实现快速插入和对 STL 集合的检索。在头文件<memory>中。
unique_ptr
为了避免和库里面的名称混淆,我自己实现的时候用的UniquePtr加以区分。
同一时刻,只能有一个unique_ptr指向某个内存区域,所以他是禁止拷贝的。unique_ptr本身是个对象,他生命周期结束时,会自动调用~unique_ptr(),将其所指对象销毁。unique_ptr指针与其所指对象的关系:在智能指针生命周期内,可以改变智能指针所指对象,如创建智能指针时通过构造函数指定、通过reset方法重新指定、通过release方法释放所有权、通过移动语义转移所有权。
主要有这几个功能:
1、能写出异常安全的代码
2、在容器中保存指针
int main()
{
vector<unique_ptr<int>> vec;
unique_ptr<int> p(new int());
vec.push_back(std::move(p)); // 使用移动语义
}
unique_ptr不支持对象间的拷贝和赋值。(困惑:class unique_ptr是不是应该继承noncopyable?但没见过这么实现的额)。
我们先来看实现:
最新文章
- 解决mysql too many connections的问题
- 动态执行python脚本
- C#字符串截取
- 【JS】HTMLprop与attr的区别
- linux默认网关的设置
- css固定div头部不随滚动条滚动
- DOTween文档
- Xcode 遇到 App Transport Security has blocked a cleartext HTTP 错误
- 直关的sql 联级更新语句
- WINCE 开机自动弹USB连接窗口问题(已解决)
- iOS之上线被拒
- 图片左右循环连续滚动代码,解决marquee的留白问题
- 正则匹配<;img src=";xxxxxx"; alt=";"; />;标签的相关写法
- 浙大 pat 1038 题解
- New Year Tree 【DFS序+先段数区间查询修改+二进制保存状态】
- Python encode() 方法(转)
- Centos7常见问题及解决方法
- LOV抛出值无效的异常
- php的精确计算
- mongodb的安装和权限管理
热门文章
- 图解 HTTP 笔记(六)——HTTP 首部
- MyISAM与InnoDB之间的区别
- 升级chrome浏览器导致网站登录功能不能用
- pip安装pillow——死循环:[WinError5] &; [TypeError:&#39;module&#39; object is not callable]
- EasyNetQ使用(五)【基于主题的路由,控制队列名称】
- 移动端自动化测试之android模拟器问题集合
- 【世界之大,我用Python】Ubuntu 自动删除自带软件
- 重置mysql数据库root密码
- Hadoop学习笔记之二 文件操作
- Spring 工程分层