移动拷贝构造函数

语法:

ClassName(ClassName&&);

目的:

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

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

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

#include <iostream>
using namespace std;class Test
{
public:int *buf;//only for demo
    Test(){buf = new int(3);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 0;
}

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

转载于:https://www.cnblogs.com/hujianglang/p/6637479.html

C++程序设计方法3:移动构造函数相关推荐

  1. 理解面向过程和面向对象的程序设计方法

    一.结构化程序设计 1,概念: 传统的结构化程序设计思想的核心是功能的分解.将问题分解为多个功能模块,根据模块功能来设计用于存储数据的数据结构,最后编写了过程(函数)对数据进行操作实现模块的功能.程序 ...

  2. 【Effective Java】1.静态工厂方法来替换构造函数

    优点一:不像构造函数,它有具意的名称 因为可以取具意的名称,更容易明白如何使用,可读性也更好, 优点二:每次调用无需创建新的对象 优点三:允许返回子类对象 这些子类可以不为public ,这样可以打造 ...

  3. 程序设计方法的发展历程

    程序设计方法的发展历程 面向过程的结构化程序设计方法 面向对象的方法 面向对象的基本概念 面向对象的软件工程 总结 面向对象程序设计:由现实世界建立软件模型 面向过程的结构化程序设计方法 设计思路 ...

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

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

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

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

  6. 《C++编程——数据结构与程序设计方法》程序范例:影碟店(源代码)

    <C++编程--数据结构与程序设计方法>中的程序范例:影碟店. 找不到附书光盘(有的能送个吗?),自己根据电子书调试通过的. 可做为模板.链表及相关程序设计的参考. 放到我上传的资源里了, ...

  7. 计算机二级程序设计提交,程序设计方法与风格(计算机二级复习指导)

    程序设计方法与风格 程序设计方法:主要经过了面向过程的结构化程序设计和面向对象的程序设计方法. 程序设计风格,是指编写程序时所表现出来的特点.习惯和逻辑思路. 要形成良好的程序设计的风格,应考虑如下因 ...

  8. c语言中分不分大小写,C语言高级语言程序设计(一)-第四章 程序设计方法-模块化与算法设计.ppt...

    高级语言程序设计(一) (C Programming),第四讲:程序设计方法-模块化与算法设计,本章目标,进一步掌握模块化设计思想 掌握常用的数据查找及排序方法 了解全局变量 了解递归程序设计思想,问 ...

  9. 面向对象程序设计方法RPG小游戏实例

    第四章面向对象程序设计方法 一.实验目的 1.掌握面向对象程序设计的方法.明确类与对象的概念,掌握面向对象设计七大原则: 2.掌握常见的设计模式以及类图的描述 二.七大原则总结 (1)单一职责原则:类 ...

  10. 面向对象程序设计方法概述

    (1)面向过程与面向对象的比较 面向过程程序设计方法(C语言) 分析出要解决所需要的步骤,然后用函数把各步骤逐个实现,运行时依次调用各个函数即可. 程序 = 算法 + 数据结构 面向对象程序设计方法( ...

最新文章

  1. Go语言fmt.Printf使用指南(占位符总结)
  2. Django2.2 pymysql 连接mysql数据库的坑
  3. mysql启动报错2002_mysql登陆启动报错 ERROR 2002 (HY000) 解决方法
  4. 探索Julia(part10)--自定义函数
  5. Linux实现的IEEE 802.q VLAN
  6. ruby推送示例_Ruby直到示例循环
  7. maven中的groupId和artifactId到底指的是什么?
  8. 【数据结构amp;amp;等差数列】KMP简介和算法的实现(c++ amp;amp; java)
  9. 二分图最大权匹配:Kuhn-Munkres算法
  10. 吾不是爱管闲事,实在是忍无可忍
  11. 前端项目——当当图书网(javaScript)
  12. qq音乐无损下载php源码,QQ音乐无损歌曲地址分析以及多平台源码
  13. 【软件测试】使用C++ Test 进行静态测试
  14. EPLAN电气设计实例入门教程pdf
  15. php提取pdf中的文字,如何提取pdf中的文字内容 如何从pdf中提取文字
  16. 计算机的基本配件图片,计算机硬件的重要部件
  17. 路由器角色 ABR ASBR
  18. 非典型文字描边效果的实现方法
  19. 计算机网络原理与技术
  20. 网络上长说的监听某个端口是什么意思

热门文章

  1. Effective C# Item33:限制类型的可见性
  2. mysql 交互命令 导出_MySQL数据导入导出方法与工具(2)
  3. 漫谈Windows共享内存
  4. 服务发现和注册和Eureka
  5. scala基础之对象
  6. (16)Verilog模块例化-基本语法(四)(第4天)
  7. (14)Verilog HDL参数:parameter
  8. QCostomPlot 示例注解 1
  9. 【蓝桥杯嵌入式】【STM32】11_2016_第七届_蓝桥杯_省赛_电压测量监控设备
  10. linux路由内核实现分析(四)---路由缓存机制(3)