C++程序设计方法3:移动构造函数
移动拷贝构造函数
语法:
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,概念: 传统的结构化程序设计思想的核心是功能的分解.将问题分解为多个功能模块,根据模块功能来设计用于存储数据的数据结构,最后编写了过程(函数)对数据进行操作实现模块的功能.程序 ...
- 【Effective Java】1.静态工厂方法来替换构造函数
优点一:不像构造函数,它有具意的名称 因为可以取具意的名称,更容易明白如何使用,可读性也更好, 优点二:每次调用无需创建新的对象 优点三:允许返回子类对象 这些子类可以不为public ,这样可以打造 ...
- 程序设计方法的发展历程
程序设计方法的发展历程 面向过程的结构化程序设计方法 面向对象的方法 面向对象的基本概念 面向对象的软件工程 总结 面向对象程序设计:由现实世界建立软件模型 面向过程的结构化程序设计方法 设计思路 ...
- mooc- 基本程序设计方法week1,week2
学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...
- 学JAVA第十三天,方法、方法重载及构造函数
今天终于不讲狗跳楼的问题了,今天讲了方法,方法重载及构造函数及构造函数重载的课程了. 这里说了有参好无参的,下面讲构造函数重载和方法重载. 其实,这上面写的这些方法,就相当一个模板.想要快速做出产品就 ...
- 《C++编程——数据结构与程序设计方法》程序范例:影碟店(源代码)
<C++编程--数据结构与程序设计方法>中的程序范例:影碟店. 找不到附书光盘(有的能送个吗?),自己根据电子书调试通过的. 可做为模板.链表及相关程序设计的参考. 放到我上传的资源里了, ...
- 计算机二级程序设计提交,程序设计方法与风格(计算机二级复习指导)
程序设计方法与风格 程序设计方法:主要经过了面向过程的结构化程序设计和面向对象的程序设计方法. 程序设计风格,是指编写程序时所表现出来的特点.习惯和逻辑思路. 要形成良好的程序设计的风格,应考虑如下因 ...
- c语言中分不分大小写,C语言高级语言程序设计(一)-第四章 程序设计方法-模块化与算法设计.ppt...
高级语言程序设计(一) (C Programming),第四讲:程序设计方法-模块化与算法设计,本章目标,进一步掌握模块化设计思想 掌握常用的数据查找及排序方法 了解全局变量 了解递归程序设计思想,问 ...
- 面向对象程序设计方法RPG小游戏实例
第四章面向对象程序设计方法 一.实验目的 1.掌握面向对象程序设计的方法.明确类与对象的概念,掌握面向对象设计七大原则: 2.掌握常见的设计模式以及类图的描述 二.七大原则总结 (1)单一职责原则:类 ...
- 面向对象程序设计方法概述
(1)面向过程与面向对象的比较 面向过程程序设计方法(C语言) 分析出要解决所需要的步骤,然后用函数把各步骤逐个实现,运行时依次调用各个函数即可. 程序 = 算法 + 数据结构 面向对象程序设计方法( ...
最新文章
- Go语言fmt.Printf使用指南(占位符总结)
- Django2.2 pymysql 连接mysql数据库的坑
- mysql启动报错2002_mysql登陆启动报错 ERROR 2002 (HY000) 解决方法
- 探索Julia(part10)--自定义函数
- Linux实现的IEEE 802.q VLAN
- ruby推送示例_Ruby直到示例循环
- maven中的groupId和artifactId到底指的是什么?
- 【数据结构amp;amp;等差数列】KMP简介和算法的实现(c++ amp;amp; java)
- 二分图最大权匹配:Kuhn-Munkres算法
- 吾不是爱管闲事,实在是忍无可忍
- 前端项目——当当图书网(javaScript)
- qq音乐无损下载php源码,QQ音乐无损歌曲地址分析以及多平台源码
- 【软件测试】使用C++ Test 进行静态测试
- EPLAN电气设计实例入门教程pdf
- php提取pdf中的文字,如何提取pdf中的文字内容 如何从pdf中提取文字
- 计算机的基本配件图片,计算机硬件的重要部件
- 路由器角色 ABR ASBR
- 非典型文字描边效果的实现方法
- 计算机网络原理与技术
- 网络上长说的监听某个端口是什么意思
热门文章
- Effective C# Item33:限制类型的可见性
- mysql 交互命令 导出_MySQL数据导入导出方法与工具(2)
- 漫谈Windows共享内存
- 服务发现和注册和Eureka
- scala基础之对象
- (16)Verilog模块例化-基本语法(四)(第4天)
- (14)Verilog HDL参数:parameter
- QCostomPlot 示例注解 1
- 【蓝桥杯嵌入式】【STM32】11_2016_第七届_蓝桥杯_省赛_电压测量监控设备
- linux路由内核实现分析(四)---路由缓存机制(3)