前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云+社区年度征文】C++ 拷贝构造函数和赋值运算符

【云+社区年度征文】C++ 拷贝构造函数和赋值运算符

原创
作者头像
瑶瑶
修改2020-12-24 09:26:58
5480
修改2020-12-24 09:26:58
举报
文章被收录于专栏:音视频技术开发

拷贝构造函数

首先拷贝构造函数是一个“构造函数”,函数名与类名相同,没有返回值。形参是本类对象的引用。函数作用是创建一个新对象,本类对象的引用是用来初始化新创建的对象。

函数定义:

代码语言:txt
复制
A(A & a)
{
    *this = a;
}

调用拷贝构造函数主要有以下场景:

  1. 对象作为函数的参数,以值传递的方式传给函数。
  2. 对象作为函数的返回值,以值的方式从函数返回。
  3. 使用一个对象给另一个对象初始化。有一下两种语法: 类名 对象2(对象1)。例如:“A obj2(obj1);” 类名 对象2 = 对象1。例如:“A obj2 = obj1;”

赋值运算符

赋值运算符是用来给对象赋值的,前提是,已经创建好对象了。

函数定义:

代码语言:txt
复制
//返回值必须为引用,如果写成对象,符合上面调用拷贝构造函数场景2,对象作为函数返回值的情况,就会调用拷//贝构造函数,而拷贝构造函数中有“ = ”,再次调用赋值运算符,最终造成循环调用,程序崩溃。
A & operator = (A & a){
    return *this;
}

调用赋值运算符场景:

  1. 对象内存空间已分配好,需要赋值 注:如果对象中有堆内存,必须做赋值运算符重载,否则,源对象和目标对象都指向堆内存的同一段内容,在析构对象的时候,就会连续两次释放堆上的那一块内存区域,从而导致程序异常。

调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生,如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。

对象赋值

代码语言:txt
复制
A a(1);
A b;
a = b;

对象拷贝

代码语言:txt
复制
A a(1);
A b = a;



原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 拷贝构造函数
  • 赋值运算符
  • 调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生,如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档