当前位置: 首页 > news >正文

c++ 赋值函数和拷贝构造函数的调用时机

测试代码:

void testcopyAndFuzhi() {class Dog {private:string name;public:Dog(string myname) : name(myname) {}Dog(Dog& otherDog) {std::cout << "调用拷贝构造函数." << endl;this->name = otherDog.name;}Dog& operator= (Dog& otherDog) {std::cout << "调用赋值." << endl;this->name = otherDog.name;return *this;}~Dog() {}void print() const {std::cout << "dog name: " << name << endl;}};Dog d1("哈士奇"), d2("泰迪");std::cout << "开始赋值:" << endl;d1 = d2; // 调用赋值.d1.print(); // dog name: 泰迪std::cout << "================" << endl;Dog d3(d2); // 调用拷贝构造函数.std::cout << "----------------" << endl;Dog d4 = d3; // 调用拷贝构造函数.	
}

打印:

拷贝构造函数的调用时机:

1、对象初始化时,用已有对象初始化新对象; 

2、值传递参数,对象作为函数参数按值传递时; 

3、值返回对象,函数返回对象且未触发返回值优化(RVO); 

4、异常处理,抛出或捕获异常对象时

赋值运算符重载的调用时机:

1、对象已存在时:对已构造对象进行赋值(如 obj2 = obj1;

关键区别:拷贝构造函数用于创建新对象并初始化, 而赋值运算符用于修改已存在对象的值

 

相关文章:

  • debian12操作系统apt命令出现无法安全的用该源更新解决方案
  • 在考古方向遥遥领先的高校课程建设-250602
  • postman工具使用
  • javaEE->IO:
  • 力扣热题100之对称二叉树
  • 【leetcode】459.重复的子字符串
  • 【Hot 100】70. 爬楼梯
  • 面向对象进阶 | 深入探究 Java 静态成员与继承体系
  • 监督学习 vs 无监督学习:AI两大学习范式深度解析
  • 数学建模期末速成 最短路径
  • 如何提升大模型召回率和实战案例
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 由浅入深一文详解同余原理
  • 本科毕业论文总结
  • STM32 智能小车项目 L298N 电机驱动模块
  • C. Basketball Exercise
  • H3C 交换机基本命令详解
  • 功能结构整理
  • 关于人工智能指令
  • 优化WP外贸建站提升用户体验
  • 设计专业新手网站/免费注册推广网站
  • 全国疫情死亡最新消息/南京谷歌优化
  • 工信部怎么查网站备案/近期新闻热点事件简短
  • 自己如何做公司网站视频/友情链接交换平台
  • 做ui设计用什么素材网站/2024疫情最新消息今天
  • 专门网站建设/百度平台商户电话号码