std::unique_ptr的用法】的更多相关文章

std::ofstream("demo.txt") << 'x'; // 准备要读的文件 { std::unique_ptr<std::FILE, decltype(&std::fclose)> fp(std::fopen("demo.txt", "r"), &std::fclose); if(fp) // fopen 可以打开失败:该情况下 fp 保有空指针 std::cout << (cha…
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_ptr<T> myPtr(new T); std::unique_ptr<T> myOtherPtr = myPtr; // error 但是unique_ptr允许通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_ptr,注意,这时它本身就…
在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移问题.这导致多个std::auto_ptr类型的局部变量不能共享同一个资源,这个问题是非常严重的哦.因为,我个人觉得,智能指针内存管理要解决的根本问题是:一个堆对象(或则资源,比如文件句柄)在被多个对象引用的情况下,何时释放资源的问题.何时释放很简单,就是在最后一个引用它的对象被释放的时候释放它.关…
Pimpl(Pointer to implementation)很多同学都不陌生,但是从原始指针升级到C++11的独占指针std::unique_ptr时,会遇到一个incomplete type的报错,本文来分析一下报错的原因以及分享几种解决方法 问题现象 首先举一个传统C++中的Pimpl的例子 // widget.h // 预先声明 class Impl; class Widget { Impl * pImpl; }; 很简单,没什么问题,但是使用的是原始指针,现在我们升级到std::un…
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5462363.html 参考网址: http://stackoverflow.com/questions/13061979/shared-ptr-to-an-array-should-it-be-used 默认情况下,std::shared_ptr会调用delete来清空内存.当使用new[] 分配内存时,需要调用delete[] 来释放内存,否则会有内存泄露. 可以通过以下代码来自定义释放内存的函数…
std::unique_ptr 1.特性 1) 任意时刻只能由一个unique_ptr指向某个对象,指针销毁时,指向的对象也会被删除(通过内置删除器,通过调用析构函数实现删除对象) 2)禁止拷贝和赋值(底层实现拷贝构造函数和复制构造函数 = delete),可以使用std::move().unique_ptr.reset(...) 转移对象指针控制权. 2.怎么实现禁止拷贝构造和赋值构造? 拷贝构造 和 赋值符‘=’ 对应函数 被删除了,所以用不了.  (看下面的构造函数表) default (…
比较代码之间可能相差大,可是速度相差很大,而且目的在于测试unique_ptr使用...; C/C++: #include <iostream> std::unique_ptr<char[]> strcat_test(std::initializer_list<const char *> li) { std::size_t size{}; std::for_each(li.begin(), li.end(), [&size](const char *str) {…
C++11智能指针之std::unique_ptr   uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云算法或者普通指针 unique_ptr<Investment> up(new Investment()); 或者 Investment *pInv = new Investment(); unique_ptr<Investment> up1(pInv); 通过make_unique a…
std::unique_ptr std::unique_ptr是一种几乎和原始指针一样高效的智能指针,对所管理的指针资源拥有独占权.由C++11标准引入,用于替代C++98中过时的std::auto_ptr智能指针.相比而言,std::unique_ptr的优点有: 语义更清晰:std::auto_ptr进行拷贝的时候实际执行的是移动语义,但C++98中并没有定义出移动语义,所以使用的时候可能会违背直觉.而std::unique_ptr利用了C++11中新定义的移动语义,只允许移动操作,禁止拷贝…
1 smart pointer 思想 ​ 个人认为smart pointer实际上就是一个对原始指针类型的一个封装类,并对外提供了-> 和 * 两种操作,使得其能够表现出原始指针的操作行为. ​ 要理解smart pointer思想首先要了解一个概念RAII(Resource Acquisition Is Initialization), 直译为资源获取即初始化,核心理念为在对象创建时分配资源,而在对象销毁时释放资源. ​ 根据RAII理念,如果对象创建在栈(stack)上,由于栈上的对象在销毁…