六个默认函数:

  1. 构造函数(construct)
  2. 析构函数(destruct)
  3. 复制构造函数(copy construct)
  4. 赋值(assign)
  5. 移动构造函数(move construct)
  6. 移动赋值(move)

测试代码:

#include <iostream>

using namespace std;

int g_constructCount = 0;
int g_copyConstructCount = 0;
int g_destructCount = 0;
int g_moveConstructCount = 0;
int g_assignCount = 0;
int g_moveCount = 0; struct A
{ A()
{
cout << "construct:" << ++g_constructCount << endl;
} A(const A& a)
{
cout << "copy construct:" << ++g_copyConstructCount << endl;
} A(A&& a)
{
cout << "move construct:" << ++g_moveConstructCount << endl;
} ~A()
{
cout << "destruct:" << ++g_destructCount << endl;
} A& operator=(const A& other)
{
cout << "assign:" << ++g_assignCount << endl;
return *this;
}
A& operator=(A&& a)
{
cout << "move:" << ++g_moveCount << endl;
return *this;
}
};

测试:

情形一:A a等价于A a=A();

情形二:

{
A a ;
a = A();//A()为右值,所以move
} 结果:
construct:1
construct:2
move:1
destruct:1
destruct:2

情形三: A a,b; a=b;//b为左值,所以assign

情形四:

{
A a;
A c(a);
} 结果:
construct:1
copy construct:1
destruct:1
destruct:2

函数参数传递:

void fun(A a)
{
cout << "funA" << endl;
}

情形一:

{
A a;
fun(a);
} 结果:
construct:1
copy construct:1
funA
destruct:1
destruct:2

情形二:

{
A a;
fun(move(a));
} 结果:
construct:1
move construct:1
funA
destruct:1
destruct:2

情形三:

{
fun(A());
} 结果:
construct:1
funA
destruct:1

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++11 类的六个默认函数及其使用的更多相关文章

  1. C++类中隐藏的六个默认函数

    Test类中隐藏的六个默认的函数 class Test { public: //默认的构造函数 Test(): //析构函数 ~Test(): //拷贝构造函数 Test(const Test &am ...

  2. C++类的默认函数

    在C++中,一个类有八个默认函数: 默认构造函数: 默认拷贝构造函数: 默认析构函数: 默认重载赋值运算符函数: 默认重载取址运算符函数: 默认重载取址运算符const函数: 默认移动构造函数(C++ ...

  3. C++:类中两个易被忽略的默认函数

    C++的自定义类中有六个默认的函数,即如果用户没有显式定义这些函数时,C++编译器会类中生成这些函数的默认形式.除了大家所熟知的构造函数.拷贝构造函数.赋值函数和析构函数外,C++为自定义类 还提供了 ...

  4. C++基础知识梳理--C++的6个默认函数

    C++有六个默认函数:分别是 1.default构造函数; 2.默认拷贝构造函数; 3.默认析构函数; 4.赋值运算符; 5.取值运算符; 6.取值运算符const; // 这两个类的效果相同 cla ...

  5. c++11 类默认函数的控制:"=default" 和 "=delete"函数

    c++11 类默认函数的控制:"=default" 和 "=delete"函数 #define _CRT_SECURE_NO_WARNINGS #include ...

  6. c++11 类默认函数的控制:"=default" 和 "=delete"函数 void fun() = default; void fun()=delete;

    转自:lsgxeva #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #includ ...

  7. c++基础知识_c++11 类默认函数的控制:"=default" 和 "=delete"函数

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vecto ...

  8. C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数

    C++构造函数和析构函数 默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!! (1)构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹 ...

  9. C++11之使用或禁用对象的默认函数

    [C++11之使用或禁用对象的默认函数] C++11 允许显式地表明采用或拒用编译器提供的内置函数.例如要求类型带有默认构造函数,可以用以下的语法: 另一方面,也可以禁止编译器自动产生某些函数.如下面 ...

随机推荐

  1. bitmap==null

    bitmap==null 一.问题介绍 调试找bug的过程出现bitmap==null,而传过来创建bitmap的byte array有数据, 结果看了函数说明: 果断知道是那个图片没有办法decod ...

  2. java正则表达式(基础篇)

    1.数量表达 {n} :出现n次 {m,n}:最少出现m次,最多出现n次 *:表示出现>=0次,相当于{0,} +:表示出现>=1次,相当于{1,} ?:表示出现1次或0次 |:左右两边正 ...

  3. 接口测试工具---postman下载地址

    接口测试工具---postman下载地址: https://app.getpostman.com/app/download/win64?_ga=2.3555895.622696496.15081214 ...

  4. git一个系列教程

    https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%8 ...

  5. 【Java】访问权限

    一.访问权限修饰词 关键字 名称 本类 同一包中的类 子类 其他包中的类 public  接口访问权限 √ √ √ √ protected 继承访问权限 √ √ √ x 默认 包访问权限  √ √ x ...

  6. List排序共通代码

    此共通方法可以根据特定字段进行排序 package com.gomecar.index.common.utils; import java.lang.reflect.Method; import ja ...

  7. 【python】numpy pandas 特性(随时更新)

    [value map] 用df.replace(dict)可以解决.但是如果dict太大,会非常非常慢. [array相加的维度规律][广播] (2,3) 能和 (3,) 相加,不能和(2,)相加 ( ...

  8. js控制iframe的刷新(页面局部刷新)

    今天遇到个问题,后台会员审核之后,页面内的会员审核状态要及时改变,但又不能指望用户手动刷新(用户体验很不好) 如果审核页面和显示审核状态时同在一个html页面的话,那么直接用js改变div内部的文本就 ...

  9. 使用 DocFX 生成 .Net/Unity项目文档

    孙广东  2017.5.27 http://blog.csdn.NET/u010019717 微软开源全新的文档生成工具DocFX   类似JSDoc或Sphinx     如何使用看 : http: ...

  10. Markdown博文快速转为微信文章

    介绍 技术博文在CSDN上,全是Markdown格式,最近看各位大佬又是个人网站又是个人微信公众号,突然发现: "个人博客小站 + 个人微信公众号 + CSDN + 掘金+ - = 程序员标 ...