c++11 move构造函数和move operator 函数 学习
先看个代码吧!!!!!!!!!!
#include <iostream> using namespace std; class A
{
public:
A(){cout<<"construct1..............."<<endl;}
A& operator = (const A&&) {cout<<" operator move"<<endl;}
A(const A&&){cout<<"move construct "<<endl;} A& operator = (const A&){cout<<"copy operator"<<endl;}
A(const A&){cout<<"copy construct"<<endl;}
};
int main()
{
A a1 = A(); // 这里调用的到底是哪一个构造函数?
A a2 = std::move(A()); // 调用什么呢?
a2 = A();//调用operator =(const A&&) A&& a = A();//只调用默认构造
return 0;
}
$g++ -std=c++11 -o main *.cpp -fno-elide-constructors 去掉优化
$main
construct1...............
move construct
construct1...............
move construct
construct1...............
operator move
construct1...............
上面的代码如果注释掉9行10行结果如下
$g++ -std=c++11 -o main *.cpp -fno-elide-constructors 去掉优化
$main
construct1...............
copy construct
construct1...............
copy construct
construct1...............
copy operator
construct1...............
上面的代码正好验证了一句话 定义了move构造函数后,拷贝构造函数默认为删除的。 不删除也不会有什么影响!!!(目前是这样)
effective modern cpp 条款17 理解特殊成员函数的生成规则
你要记住的事
- 特殊成员函数是那些编译器可能自己帮我们生成的函数:默认构造函数,析构函数,copy操作,move操作。
- 只有在类中没有显式声明的move操作,copy操作和析构函数时,move操作才被自动生成。
- 只有在类中没有显式声明的拷贝构造函数的时候,拷贝构造函数才被自动生成。只要存在move操作的声明,拷贝构造函数就会被删除(delete)。拷贝operator=和拷贝构造函数的情况类似。在有显式声明的copy操作或析构函数时,另一个copy操作能被生成,但是这种生成方法是被弃用的
- 成员函数模板永远不会抑制特殊成员函数的生成。
还未学完!!!!!!!!
c++11 move构造函数和move operator 函数 学习的更多相关文章
- c++11 标准库函数 std::move 和 完美转发 std::forward
c++11 标准库函数 std::move 和 完美转发 std::forward #define _CRT_SECURE_NO_WARNINGS #include <iostream> ...
- C++移动构造函数以及move语句简单介绍
C++移动构造函数以及move语句简单介绍 首先看一个小例子: #include <iostream> #include <cstring> #include <cstd ...
- 【C++】拷贝构造函数和赋值符函数
在C++中,调用拷贝构造函数有三种情况: 1.一个对象作为函数参数,以值传递的方式传入函数体. 2.一个对象作为函数返回值,以值传递的方式从函数返回. 3.一个对象用于给另外一个对象进行初始化(复制初 ...
- C++11 中的 Defaulted 和 Deleted 函数
http://blog.jobbole.com/103669/ C++11 中的 Defaulted 和 Deleted 函数 2016/07/21 · C/C++, 开发 · C++ 分享到:3 ...
- C++11:移动构造函数的测试
C++11:移动构造函数的测试 代码如下: #include <iostream> #include <stddef.h> #include <Windows.h> ...
- JavaScript中以构造函数的方式调用函数
转自:http://www.cnblogs.com/Saints/p/6012188.html 构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明. ...
- 关于在C#中构造函数中调用虚函数的问题
在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...
- C++ Daily 《3》----构造函数可否是虚函数
C++ 中构造函数可否是虚函数? 绝不要!! 而且,在构造函数中调用虚函数也是不提倡的行为,因为会引发预想不到的结果. 因为,在 derived class 对象构造的过程中,首先调用的是基类的构造函 ...
- C++ 构造函数中调用虚函数
我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数.这种调用都是对象已经构建完成的情况.那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: class A { p ...
随机推荐
- 855C Helga Hufflepuff's Cup
传送门 题目大意 给你一棵树,可以染m种颜色,现定义一种特殊的颜色K,一棵树上最多能有x个特殊颜色.如果一个节点为特殊颜色,那么他相邻的节点的值只能选比K小的颜色,问一共有多少种染色方案. 分析 不难 ...
- Luogu 2467 [SDOI2010]地精部落
挺有意思的题. 优质题解: https://www.luogu.org/blog/user55639/solution-p2467 题意为求长度为n,取值为$[1, n]$的波动序列的个数. 首先需要 ...
- input的on(‘input’,function(0{})事件
$('div[name="swlw"]').on('input',function(e){ function(){}; });
- 42、生鲜电商平台-商品的spu和sku数据结构设计与架构
说明:Java开源生鲜电商平台中商品的spu和sku数据结构设计与架构,包括数据库图标与架构分析. 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商 ...
- PS2018学习笔记(03-18节)
3-认识主界面 # 主界面包括: 菜单栏.选项栏.工具栏.面板.图像编辑窗口(中间)和状态栏(底部): # 界面设置: 方法1:Ctrl+k:打开界面设置; 方法2:编辑-首选项-界面 # shift ...
- Python3中实现简单的购物车程序
product_list = [ ('iphone',5800), ('imac',15800), ('watch',9800), ('cloth',550), ('coffe latee',35), ...
- 「BZOJ 1791」「IOI 2008」Island「基环树」
题意 求基环树森林所有基环树的直径之和 题解 考虑的一个基环树的直径,只会有两种情况,第一种是某个环上结点子树的直径,第二种是从两个环上结点子树内的最深路径,加上环上这两个结点之间的较长路径. 那就找 ...
- Ubuntu小记
一. Ubuntu分区记忆 参考教程调整: 1. /boot用于安装grub,设为主分区 2. /根目录20G一般足够 3. /home剩下的给home 4. swap空间=物理内存 挂载点 大小 类 ...
- ASP SQLDATASOURCE
原文链接:http://blog.csdn.net/dodream/article/details/4887076
- Could not instantiate bean class [org.springframework.data.mongodb.core.MongoTemplate]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repositoryDa ...