移动拷贝构造函数

语法:

ClassName(ClassName&&);

目的:

用来偷“临时变量”中的资源(比如内存)

临时变量被编译器设置为常量形式,使用拷贝构造函数无法将资源偷出来(“偷”是对原来对象的一种改动,违反常量的限制)

基于“右值引用“定义的移动构造函数支持接受临时变量,能偷出临时变量中的资源;

#include <iostream>
using namespace std; class Test
{
public:
int *buf;//only for demo
Test()
{
buf = new int();
cout << "Test():this->buf@ " << hex << buf << endl;
}
~Test()
{
cout << "~Test(): this->buf@" << hex << buf << endl;
if (buf)
delete buf;
} Test(const Test& t) :buf(new int(*t.buf))
{
cout << "Test(const Test&) called.this->buf@" << hex << buf << endl;
} Test(Test&& t) :buf(t.buf)
{
cout << "Test(Test&&) called.this->buf@" << hex << buf << endl;
t.buf = nullptr;
}
}; Test GetTemp()
{
Test tmp;
cout << "GetTemp(): tmp.buf@" << hex << tmp.buf << endl;
return tmp;//返回给未知名字的对象
} void fun(Test t)
{
cout << "fun(Test t):t.buf@ " << hex << t.buf << endl;
} int main()
{
Test a = GetTemp();
cout << "main():a.buf@" << hex << a.buf << endl;
fun(a);//拷贝调用
return ;
}

//备注:编译器对返回值做了优化,因此增加编译选项,禁止编译器进行返回值的优化
/*
g++ wo2.cpp --std=c++11 -fno-elide-constructors
*/

C++程序设计方法3:移动构造函数的更多相关文章

  1. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  2. mooc- 基本程序设计方法week1,week2

    学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...

  3. 学JAVA第十三天,方法、方法重载及构造函数

    今天终于不讲狗跳楼的问题了,今天讲了方法,方法重载及构造函数及构造函数重载的课程了. 这里说了有参好无参的,下面讲构造函数重载和方法重载. 其实,这上面写的这些方法,就相当一个模板.想要快速做出产品就 ...

  4. ej3-1优先使用静态工厂方法而非构造函数来创建对象

    背景 很早之前就已经自己翻译了,先简单的贴出来,并做一下回顾. 条款1 优先使用静态工厂方法而非构造函数来创建对象 允许客户端创建一个实例的传统方法是:提供一个公共构造函数:有另外一个必须成为每个程序 ...

  5. php 类名和方法名相同(构造函数)

    //php 5.6class father{ public function __construct() { echo __METHOD__; }} class son extends father{ ...

  6. C++程序设计方法3:自动类型转换

    方法1:在源类中定义目标类型转换运算符 #include <iostream> using namespace std; class Dst { public: Dst() { cout ...

  7. C++程序设计方法6:算法横向拆分

    例子1:负载监视器,如何在一个程序中实现对这些不同条件的适应呢? int main() { WindowDisplay display; Monitor monitor(&display); ...

  8. C++程序设计方法5:接口设计实例

    //例子:旋转方阵填充,要求矩阵大小任意,尺寸在运行时输入 设计思路:从上到下 int main() { cout << "Please input N:"; int ...

  9. C++程序设计方法4:函数模板

    函数模板 有些算法与类型无关,所以可以将函数的参数类型也定义为一种特殊的“参数”,这样就得到“函数模板” 定义函数模板的方法:template<typename T> 返回类型 函数名称( ...

随机推荐

  1. Idea和PyCharm激活破解

    1. 先去百度去官网下载专业版IDE, Idea 和PyCharm激活方法一样 2. 下载破解包, 点击下载 3. 将下载的jar包放到这个安装目录的bin目录下面 4. 在bin目录下面的文件pyc ...

  2. excel 中怎么让两列姓名相同排序(转)

    如图,A列B列不动,C列和D列行值不变,以A列姓名为主让C列姓名和A列相同姓名的对齐(行),D行跟着C行不变. 在E1输入公式=MATCH(C1,A:A,0)然后下拉,接著选中C,D,E列,以E列为标 ...

  3. 爬取文件时,对已经操作过的URL进行过滤

    爬取文件时,对已经操作过的URL进行过滤 1.创建过滤规则文件filter.py在spiders同级目录 class RepeatUrl: def __init__(self): self.visit ...

  4. JDK1.7 Update14 HotSpot虚拟机GC收集器

    在测试服务器上使用如下命令可以查看当前使用的 GC收集器,当然不止这一个命令可以看到,还有其他一些方式 第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了 [csii@ ...

  5. P4715 「英语」Z 语言

    题解: 平衡树维护hash值 为了支持加入删除操作 x*base^y 其中y为他是第k大 同一般的维护方法,我们不用对每个节点维护他的hash值 而是只用记录他的x值(他的位置) 然后通过updata ...

  6. ORM框架之------Dapper,Net下无敌的ORM

    一,介绍:Dapper是一款轻量级ORM工具.如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得ORM省时省力,这 ...

  7. python全栈开发day101-认证组件、权限组件、频率组件

    1.Mixins类分析 这两个函数都在GenericAPIView下,这就是为什么必须搭配继承GenericAPIView的原因. 这两个主要是get_object()较为复杂. 2.认证组件源码分析 ...

  8. LVM实现逻辑卷镜像

    本文系统 CentOS 6.5 x64 LVM的镜像功能,有点儿类似于Raid1,即多块儿磁盘互相同步,确保资料不会丢失. 1.在此添加4块物理硬盘,每块2G空间 2.将sdb.sdc.sdd.sde ...

  9. net core体系-web应用程序-4net core2.0大白话带你入门-10asp.net core session的使用

    asp.net core session的使用   Session介绍 本文假设读者已经了解Session的概念和作用,并且在传统的.net framework平台上使用过. Asp.net core ...

  10. Codeforces 986D Perfect Encoding FFT 分治 高精度

    原文链接https://www.cnblogs.com/zhouzhendong/p/9161557.html 题目传送门 - Codeforces 986D 题意 给定一个数 $n(n\leq 10 ...