1. std::unique_ptr
    是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个
    unique_ptr 赋值给另一个 unique_ptr。
  2. std::unique_ptr 不允许复制,但是可以通过函数返回给其他的 std::unique_ptr,还可以通过 std::move
    来转译给其他的 std::unique_ptr,这样原始指针的所有权就被转移了,这个原始指针还是被独占的。
  3. 使用 reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。
  • ptr1.reset(); 解除对原始内存的管理
  • ptr2.reset(new int(250)); 重新指定智能指针管理的原始内存

代码如下:

#include <iostream>
#include <memory>
#include <string>
using namespace std;class Test
{public:Test(){cout << "construct" << endl;}Test(int x) :m_num(x){cout << "construct x = " << x << endl;}Test(string str){cout << "construct str = " << str << endl;}~Test(){cout << "destruct" << endl;}void setValue(int v){m_num = v;}void print(){cout << "m_num = " << m_num << endl;}private:int m_num;
};int main()
{//通过构造函数初始化unique_ptr<int>ptr1(new int(9));//unique_ptr<int>ptr2 = ptr1; error//通过移动构造函数初始化unique_ptr<int>ptr2 = move(ptr1);//通过reset初始化ptr2.reset(new int (8));//获取原始指针unique_ptr<Test> ptr3(new Test(1));Test*pt = ptr3.get();pt->setValue(2);pt->print();ptr3->setValue(4);ptr3->print();return 0;}

测试结果:

[C++11]独占的智能指针unique_ptr的初始化和使用相关推荐

  1. [C++11]独占的智能指针unique_ptr的删除器

    unique_ptr 指定删除器和 shared_ptr 指定删除器是有区别的,unique_ptr 指定删除器的时候需要确定删除器的类型,所以不能像 shared_ptr 那样直接指定删除器,举例说 ...

  2. C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解

    目录 1.引言 2.什么是智能指针? 3.在Visual Studio中查看智能指针的源码实现 4.独占式指针unique_ptr 4.1.查看unique_ptr的源码实现片段 4.2.为什么uni ...

  3. 【C++】unique_ptr独占型智能指针详解

    指针是C/C++区别于其他语言的最强大的语法特性,借助指针,C/C++可以直接操纵内存内容.但是,指针的引入也带来了一些使用上的困难,这要求程序员自己必须手动地对分配申请的内存区进行管理. uniqu ...

  4. C++智能指针unique_ptr与shared_ptr

    文章目录 1.unique_ptr特点 2.unique_ptr例子 3.unique_ptr总结 4.shared_ptr特点 5.shared_ptr例子 6.shared_ptr中的自定义删除器 ...

  5. c++11 智能指针 unique_ptr、shared_ptr与weak_ptr

    C++11中有unique_ptr.shared_ptr与weak_ptr等智能指针(smart pointer),定义在<memory>中. 可以对动态资源进行管理,保证任何情况下,已构 ...

  6. C++11新特性——智能指针之unique_ptr

    此课件及源代码来自B站up主:码农论坛,该文章仅作为本人学习笔记使用. unique_ptr独享它指向的对象,也就是说,同时只有一个unique_ptr指向同一个对象,当这个unique_ptr被销毁 ...

  7. C++11 智能指针unique_ptr使用 -- 以排序二叉树为例

    http://www.cnblogs.com/fstang/p/3947552.html 用智能指针可以简化内存管理.以树为例,如果用普通指针,通常是在插入新节点时用new,在析构函数中调用delet ...

  8. c++ 智能指针_详解 C++ 11 中的智能指针

    C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念.这里不置贬褒,手动分配内存与手动释放内 ...

  9. 智能指针——unique_ptr

    1. 开篇 unique_ptr(唯一)是一种定义在中的智能指针(smart pointer).不能进行复制操作只能进行移动操作. unique是独特的.唯一的意思,故名思议,unique_ptr可以 ...

最新文章

  1. shell去除字符串前所有的0
  2. python3教程-终于清楚python3详细教程
  3. LeetCode 406 Queue Reconstruction by Height
  4. 每日一题题目6:二分查找
  5. 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】
  6. 第一课[编辑器设置-VC++6.0]
  7. java 字符串查找程序_java-如何在JAR文件中搜索字符串
  8. mysql 结果倒置_菜鸟 问下PHP取出MYSQL数据,然后倒置顺序
  9. 阶乘末尾蓝桥杯java_Java实现第九届蓝桥杯阶乘位数
  10. 如何终止线程的运行(C/C++)
  11. VirtualPC2007添加Shared Folder的方法for dos
  12. 在RichEdit中插入GIF图片的方法
  13. python网页爬虫菜鸟教程_Python爬虫实践(7)-抓取菜鸟教程python学习路线-工具-站长头条...
  14. java字符转换成16进制_java 16进制与字符串直接相互转换
  15. Fedora35安装ibus-rime并配置五笔86方案
  16. 天天背单词--的设计与实现(四)
  17. 网络安全等级保护等级保护对象的安全保护等级
  18. 毕业设计总结(惯性导航)
  19. 微信开放平台和公众平台的区别?
  20. Java下载文件时文件名出现乱码(但文件内容正常)

热门文章

  1. [转]定了!2020年,6种将死的编程语言!
  2. 2019-nCoV 全国新型肺炎疫情每日动态趋势可视图
  3. C语言试题十一之计算并输出下列多项式值:sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)1/2n).
  4. React Native之react-native bundle --platform android --dev false --entry-file index.js --bundle失败
  5. java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。
  6. python语法详解_解析 Python3 基础语法
  7. google浏览器插件 开发 获取页面指定数据_程序员必备的4款Chrome插件,编程神器...
  8. c语言将十进制转化为二进制算法_base64算法初探即逆向分析
  9. 2020-11-04关于出现tomcat启动失败的一种原因
  10. 这4部有生之年必看的“教材级”纪录片,免费领取!