首页 > 智能指针unique_ptr

智能指针unique_ptr

unique_ptr的一些操作:

int main()
{unique_ptr<int> uptr(new int(10));//unique_ptr uptr2(uptr);//报错//unique_ptr uptr3 = uptr;//报错
unique_ptr<int> uptr2 = std::move(uptr);//转移所有权//cout << *uptr << endl;//错误,uptr si NULLreturn 0;
}

 

unique_ptr使用场景:

  1.为动态申请的资源提供异常安全保证

传统情况,可能会因为异常而没有走到delete部分,如下:

void func()
{int *p = new int(10);//maybe throw exceptionif (NULL != p){delete p;p = NULL;}
}

使用unique_ptr,只要unique_ptr指针创建成功,析构函数就一定会被调用,如下:

void func()
{unique_ptr<int> uptr(new int(10));//maybe throw exception
}

  2.返回函数内动态申请资源的所有权

unique_ptr<int> func(int value)
{unique_ptr<int> uptr(new int(value));return uptr;
}int main()
{unique_ptr<int> uptr2 = func(10);cout << *uptr2 << endl;return 0;
}

  3.在容器内保存指针

int main()
{vectorint>> vec;unique_ptr<int> uptr(new int(10));vec.push_back(std::move(uptr));return 0;
}

  4.管理动态数组

int main()
{unique_ptr<int[]> uptr(new int[5]{ 1, 2, 3, 4, 5});uptr[0] = 100;cout << uptr[0] << endl;return 0;
}

 

转载于:https://www.cnblogs.com/chen-cai/p/9566593.html

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • C++11标准中可以为模板定义别名,比如 template using ptr=std::shared_ptr; //这里模板定义ptr为智能指针std::shared_ptr定义的别名 所以实际应用中可以借此来简化代码,比如 #include #include

  • 先说结论,智能指针都是非线程安全的。 多线程调度智能指针 这里案例使用的是shared_ptr,其他的unique_ptr或者weak_ptr的结果都是类似的,如下多线程调度代码: #include #include #include #include #i...

  • 文章目录unique_ptr 智能指针的实现shared_ptr 智能指针的实现指针类型转换 unique_ptr 智能指针的实现 一个对象只能被单个unique_ptr 所拥有。 #include using namespace std;/*增加模板类型,保证智能指针的类型是由传入的类型决定的*/ t...

  • 文章目录weak_ptr描述声明作用原理实现函数成员使用总结 weak_ptr描述 声明 头文件: 模版类:template class weak_ptr 声明方式:std::weak_ptr statement 作用 根据boost库的官方描述,weak_ptr是...

  • 文章目录shared_ptr描述声明作用原理实现函数使用关于shared_ptr循环引用问题 shared_ptr描述 声明 shared_ptr属于C++11特性中新加的一种智能指针,它的实现方式是模版类,头文件 template class shared_ptr 所以使用shared...