/* 智能指针unique_ptr */

#include <iostream>
#include <string>
#include <memory>
#include <vector> /*
unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现),
定义于 memory (非memory.h)中, 命名空间为 std. unique_ptr 不支持拷贝和赋值. */ struct Student
{
public:
Student(std::string name_, int age_) :name(name_), age(age_) {}
std::string name;
int age; }; std::unique_ptr<Student> test_clone()
{
std::unique_ptr<Student> up1 = std::make_unique<Student>("spaow",);
return up1;
} struct STDeleter
{
void operator() (int* obj)
{
if (obj)
{
for (int i = ; i < ; i++)
{
//obj[i] = i + 2;
printf("obj[i] = %d\n", obj[i]);
}
free(obj);
obj = NULL;
}
}
}; void test()
{
//初始化方式一
std::unique_ptr<Student> up1 = std::make_unique<Student>("tom",); //error unique_ptr 不支持拷贝构造函数
//std::unique_ptr<Student> up2(up1); //error unique_ptr 不支持赋值
//std::unique_ptr<Student> up3 = up1; //初始化方式二
std::unique_ptr<Student> up4(new Student("jack", )); //初始化方式三:
/*
release方法: 放弃内部对象的所有权,将内部指针置为空, 返回所内部对象的指针, 此指针需要手动释放
*/
std::unique_ptr<Student> up5(up1.release()); //初始化方式四
/*
reset方法: 销毁内部对象并接受新的对象的所有权(如果使用缺省参数的话,也就是没有任何对象的所有权, 此时仅将内部对象释放, 并置为空)
*/
std::unique_ptr<Student> up6;
up6.reset(new Student("als", )); //成员函数的使用 //可以进行移动构造和移动赋值操作
std::unique_ptr<Student> up7;
up7 = std::move(up6); std::unique_ptr<Student> up8(std::move(up7)); //特殊的拷贝
std::unique_ptr<Student> up9 = test_clone(); printf("name is [%s] .\n",up9->name.c_str()); //在容器中保存指针
std::vector<std::unique_ptr<Student> > vec;
std::unique_ptr<Student> upTmp(new Student("kld",));
vec.push_back(std::move(upTmp)); //unique_ptr 支持管理数组
std::unique_ptr<int[]> ups(new int[]); printf("sizeof(ups) = %d\n", sizeof(ups));//打印4,并非数组实际长度 for (int i = ; i < ; i++)
{
ups[i] = i;
printf("ups[i] = %d\n", ups[i]);
} //自定义删除器定义
int *tempArr = (int *)malloc(sizeof(int) * );
std::unique_ptr<int, STDeleter> usp2(tempArr, STDeleter()); int *pcIndex = usp2.get();
for (int i = ; i < ; i++)
{
pcIndex[i] = i+;
} } int main()
{
test();
getchar();
return ;
}

C++ 智能指针六的更多相关文章

  1. 【C++】智能指针简述(六):智能指针总结及补充

    本文我们主要来总结一下前文介绍过的智能指针相关原理及实现,顺便补充一下前文未提到的shared_ptr删除器部分的内容. 总结: 1.智能指针,通过RAII机制,构造对象时完成资源的初始化,析构对象时 ...

  2. C++2.0新特性(六)——<Smart Pointer(智能指针)之shared_ptr>

    Smart Pointer(智能指针)指的是一类指针,并不是单一某一个指针,它能知道自己被引用的个数以至于在最后一个引用消失时销毁它指向的对象,本文主要介绍C++2.0提供的新东西 一.Smart P ...

  3. c++ auto_ptr智能指针

    c++ auto_ptr智能指针 该类型在头文件memory中,在程序的开通通过 #include<memory> 导入,接下来讲解该智能指针的作用和使用. 使用方法: auto_ptr& ...

  4. C++智能指针简单剖析

    导读 最近在补看<C++ Primer Plus>第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑.C++面试过程中,很多面试官都喜欢问智能指针相关的问题 ...

  5. STL模板_智能指针概念

    一.智能指针1.类类型对象,在其内部封装了一个普通指针.当智能指针对象因离开作用域而被析构时,其析构函数被执行,通过其内部封装的普通指针,销毁该指针的目标对象,避免内存泄露.2.为了表现出和普通指针一 ...

  6. 【转】C++智能指针简单剖析

    原文链接:http://www.cnblogs.com/lanxuezaipiao/p/4132096.html 导读 最近在补看 <C++ Primer Plus>第六版,这的确是本好书 ...

  7. 【C++】智能指针简单剖析

    转自 http://www.cnblogs.com/lanxuezaipiao/p/4132096.html 导读 最近在补看<C++ Primer Plus>第六版,这的确是本好书,其中 ...

  8. c/c++ 智能指针 shared_ptr 使用

    智能指针 shared_ptr 使用 上一篇智能指针是啥玩意,介绍了什么是智能指针. 这一篇简单说说如何使用智能指针. 一,智能指针分3类:今天只唠唠shared_ptr shared_ptr uni ...

  9. [转]C++智能指针简单剖析

    C++智能指针简单剖析  https://www.cnblogs.com/lanxuezaipiao/p/4132096.html 导读 最近在补看<C++ Primer Plus>第六版 ...

随机推荐

  1. Leetcode分类总结(Greedy)

    贪心类题目目前除了正则匹配(Wildcard Matching)(据说其实是DP)那道还没做其他的免费题目都做了,简单做个总结. 贪心的奥义就是每一步都选择当前回合”可见范围“(即可得知的信息)内的最 ...

  2. 8.10 正睿暑期集训营 Day7

    目录 2018.8.10 正睿暑期集训营 Day7 总结 A 花园(思路) B 归来(Tarjan 拓扑) C 机场(凸函数 点分治) 考试代码 A B C 2018.8.10 正睿暑期集训营 Day ...

  3. BZOJ.2724.[Violet 6]蒲公英(静态分块)

    题目链接 区间众数 强制在线 考虑什么样的数会成为众数 如果一个区间S1的众数为x,那么S1与新区间S2的并的众数只会是x或S2中的数 所以我们可以分块先预处理f[i][j]表示第i到第j块的众数 对 ...

  4. 使用gulp对js、css、img进行合并压缩

    1 概述 最新使用AngularJS框架做单页面项目,其中包括了很多库的和自已写的js.css.img文件,这些文件都不大,但是数量众多,导致web请求文件过多,一次性加载时比较慢.有尝试过使用异步加 ...

  5. Voltage Translation for Analog to Digital Interface ADC

    Voltage Translation for Analog to Digital Interface 孕龙逻辑分析仪 ZeroPlus Logic Analyzer How to modify an ...

  6. SpringMVC默认欢迎页面的问题

    使用SpringMVC很长时间,一直有个问题没有搞定,就是web.xml中默认欢迎页面转向控制器的问题. 由于答应朋友明天要交个网站,他们对默认页面有这样的要求,并且最好也别用js等等的跳转:所以今天 ...

  7. linux查看及修改文件权限以及相关

    linux查看及修改文件权限以及相关 查看文件权限的语句: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名)那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有1 ...

  8. Knockout.Js官网学习(enable绑定、disable绑定)

    enable绑定 enable绑定使DOM元素只有在参数值为 true的时候才enabled.在form表单元素input,select,和textarea上非常有用. enable简单示例 < ...

  9. inet_ntoa内存问题

    最近写的一个程序,大致用到以下代码: WSADATA wsaData; WSAStartup (MAKEWORD( 2, 2 ),&wsaData); struct addrinfo *aiL ...

  10. 启动vmware虚拟机报错:“无法获得VMCI驱动程序的版本:句柄无效”

    启动vmware虚拟机的时候报错: 找到对应虚拟机的文件夹路径: 用记事本打开CentOS 64位.vmx,找到这么一行: vmci0.present = "TRUE" 把TRUE ...