C++中拷贝构造函数通常有三种情况

  • 使用一个已经建立完毕的对象来初始化一个新对象
  • 值传递的方式给函数参数传值
  • 以值方式返回局部对象
#include <iostream>
using namespace std;//按照参数分类    有参构造(默认构造) 无参构造
//按照类型分类    普通构造 拷贝构造
class Person{public://构造函数 Person(){cout << "Person 无参构造函数的调用!" << endl; }Person(int age){m_Age = age;cout << "Person 有参构造函数的调用!" << endl; }//拷贝构造函数Person(const Person &p){m_Age = p.m_Age ;//将传入的person的属性拷贝到我身上 cout << "Person的拷贝构造函数的调用!" << endl;} //析构函数~Person(){cout << "Person 析造函数的调用!" << endl; } int m_Age;
};//1、使用一个已经建立完毕的对象来初始化一个新对象
void test01(){Person p1(10);Person p2(p1);cout << "p2的年龄为 " << p2.m_Age << endl;
}void doWork(Person p){}
//2、值传递的方式给函数参数传值
void test02(){Person p;doWork(p);
}Person doWork2(){Person p1;return p1;
}
//3、以值方式返回局部对象
void test03(){Person p = doWork2();
}
int main(){//  test01();
//  test02();test03();system("pause");return 0;
}

最后一种没有打印拷贝构造函数调用 和返回值优化有关。

返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术,即删除保持函数返回值的临时对象。这可能会省略两次复制构造函数,即使复制构造函数有副作用。典型地,当一个函数返回一个对象实例,一个临时对象将被创建并通过复制构造函数把目标对象复制给这个临时对象。C++标准允许省略这些复制构造函数,即使这导致程序的不同行为,即使编译器把两个对象视作同一个具有副作用。

类和对象—对象特性—拷贝构造函数调用时期相关推荐

  1. C++拷贝构造函数调用时机

    C++拷贝构造函数调用时机 C++中拷贝构造函数调用时机通常有三种情况 示例 C++中拷贝构造函数调用时机通常有三种情况 使用一个已经创建完毕的对象来初始化一个新对象 值传递的方式给函数参数传值 以值 ...

  2. C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042

  3. C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043

  4. C++ 子类的拷贝构造函数调用其父类的拷贝构造函数

    一个经常发生的和继承有关的类似问题是在实现派生类的拷贝构造函数时.看看下面这个构造函数: www.huaqiangu6.com class base { public: base(int initia ...

  5. C++拷贝构造函数调用时机分析

    让我们来分析下面这段代码: #include <iostream> #include <string> using namespace std;class Employee { ...

  6. 类和对象—对象特性—构造函数调用规则

    默认情况下,C++编译器至少给一个类添加三个函数 默认构造函数(无参,函数体为空) 默认析构函数(无参,函数体为空) 默认拷贝构造函数,对属性进行值拷贝 构造函数调用规则如下: 如果用户定义有参构造函 ...

  7. c/c++教程 - 2.4.2.1~2 对象的初始化和清理,构造函数和析构函数,构造函数的分类和调用(有参构造,无参构造,普通构造,拷贝构造,括号法,显示法,隐式转换法,匿名对象)

    目录 4.2 对象的初始化和清理 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类及调用 相关教程 4.2 对象的初始化和清理 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候 ...

  8. 对象特性-----拷贝构造函数的调用

    C++中拷贝构造函数调用通常三种情况: ****使用一个已经创建完毕的对象来初始化一个新对象 ****值传递的方式给函数参数传值 ****以值方式返回局部对象 #include<iostream ...

  9. 「地表最强」C++核心编程(五)类和对象--对象初始化和清理

    环境: 编译器:CLion2021.3:操作系统:macOS Ventura 13.0.1 文章目录 一.构造函数和析构函数 1.1 构造函数 1.2 析构函数 1.3 示例 二.构造函数的分类及调用 ...

最新文章

  1. 【组队学习】【第30期】青少年编程(Scratch 三级)
  2. TS流解析之PAT表格解析
  3. C++ Primer 5th笔记(chap 12 动态内存)unique_ptr
  4. linux 总数 进程_linux性能监控之 top 家族(1)
  5. 如何用DELPHI实现把WORD、EXCEL和图片等存储到数据库中
  6. Symbian开发平台的搭建之VC++6.0Carbide C++ 2.0
  7. windy数(BZOJ-1026)
  8. 查询php copy函数源码,PHP copy函数使用案例代码解析
  9. Kotlin入门(29)任务Runnable
  10. Android ADV 虚拟卡常见错误Failed to push的解决
  11. 工具:Wind金融终端使用指南
  12. mysql和oracle的字符串拼接_Oracle和Mysql中的字符串的拼接
  13. 欧洲之星fotona4d有效果吗?做一次有效果吗?
  14. Android开发虚拟机测试没问题,真机调试就出现问题,总是闪退!10秒解决!!
  15. python朋友圈自动点赞_基于airtest的朋友圈自动点赞
  16. Vector去除重复元素
  17. 悼念:黑白素色网页背景设置教程
  18. paddledet 训练旋转目标检测 ppyoloe-r 训练自己的数据集
  19. easyUI tree 自定义图标
  20. MySQL数据库实操教程(15)——表的关联关系

热门文章

  1. jquery源码 DOM加载
  2. 20169205实验一 Java开发环境的熟悉(Linux+IDEA)
  3. 第二次冲刺每日站立会议04
  4. 智能算法之Matlab实现(1)——遗传算法(1)
  5. 解决GIT代码仓库不同步问题
  6. Silverlight 2 RTW中ToolTipService.ToolTip不继承父节点的DataContext的问题
  7. Python list 操作
  8. UA MATH563 概率论的数学基础 中心极限定理16 Kolmogorov 3-series定理
  9. UA MATH564 概率论 样本均值的偏度与峰度
  10. 混淆工具Dotfuscator基本使用