unique_ptr 替代了原来的auto_ptr,指向对象具有唯一性,即同一时间只能有unique_ptr指向给定对象(和auto_ptr不同是禁止拷贝语义,通过移动语义替代) unique_ptr对象生命周期与其作用域范围保持一致,从创建直至其离开作用域 unique_ptr 指针和其所绑定对象 ...
分类:
编程语言 时间:
2018-05-18 14:07:18
阅读次数:
177
看到的文章,觉得很不错,保留一下,不知是不是原文的地址:https://www.cnblogs.com/qicosmos/p/4283455.html 从4行代码看右值引用 概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是 ...
分类:
其他好文 时间:
2018-05-12 21:35:39
阅读次数:
177
C++11之前value categories只有两类,lvalue和rvalue,在C++11之后出现了新的value categories,即prvalue, glvalue, xvalue。不理解value categories可能会让我们遇到一些坑时不知怎么去修改,所以理解value cat... ...
分类:
移动开发 时间:
2018-04-19 18:19:09
阅读次数:
322
一、概述 移动构造函数可以弥补拷贝构造函数的空缺。 移动语义,简单来说解决的是各种情形下对象的资源所有权转移的问题。而在C++11之前,移动语义的缺失是C++饱受诟病的问题之一。 举个栗子。 问题一:如何将大象放入冰箱?答案是众所周知的。首先你需要有一台特殊的冰箱,这台冰箱是为了装下大象而制造的。你 ...
分类:
移动开发 时间:
2018-02-27 23:27:47
阅读次数:
253
只允许基础指针的一个所有者。 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr)。 替换已弃用的 auto_ptr。 相较于 boost::scoped_ptr。 unique_ptr 小巧高效;大小等同于一个指针,支持 rvalue 引用, ...
分类:
其他好文 时间:
2018-02-25 14:42:25
阅读次数:
232
1 深层复制与浅层复制浅层复制:实现对象间数据元素的一一对应复制。深层复制:当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指对象进行复制。 2 移动构造C++11 标准中提供了一种新的构造方法——移动构造。C++11 引入移动语义: 源对象资源的控制权全部交给目标对象 当临 ...
分类:
移动开发 时间:
2017-12-14 04:08:51
阅读次数:
124
1. std::move (1)std::move的原型 (2)std::move的作用 ①std::move函数的本质就是强制转换,它无条件地将参数转换为把一个右值引用,又由于函数返回的右值引用(匿名对象)是一个右值。因此,std::move所做的所有事情就是转换它的参数为一个右值。继而用于移动语 ...
分类:
移动开发 时间:
2017-10-27 01:19:38
阅读次数:
250
为什么要用移动语义 先看看下面的代码 以上代码拷贝构造函数会被调用两次,一次是从GetTemp函数中有HugeMem()生成的一个临时值用作返回值,另外一次则由临时值构造出main中的变量a。析构函数调用了三次。这个过程如果指针指向非常大的内存时拷贝构造 的代价相当昂贵。而令人堪忧的是:临时变量的生 ...
分类:
移动开发 时间:
2017-10-14 01:33:44
阅读次数:
254
为什么要用移动语义 它是为了减少对象拷贝开销而存在的,具体请看本文后面几节代码 左值和右值 判断左值和右值的方法有两种 1.在等号左边的值就称为左值而在等号右边的称为右值 2.另外在c++中还有一种判别方法就是可以取地址,有名的就是左值,不能取地址,没有名的就是右值 例如: a = b + c a在 ...
分类:
编程语言 时间:
2017-10-13 10:28:37
阅读次数:
215