为了账号安全,请及时绑定邮箱和手机立即绑定

c++中拷贝构造函数和赋值运算符重载本质上一样么

c++中拷贝构造函数和赋值运算符重载本质上一样么

C++
繁花如伊 2019-04-08 04:04:10
c++中拷贝构造函数和赋值运算符重载本质上一样么
查看完整描述

4 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

本质不一样,语法上也不一样


他们的区别:

  1. 拷贝构造函数是在一堆原始的内存上建立起一个对象。

  2. 复制运算符重载是在已初始化的对象上进行复制。


查看完整回答
反对 回复 2019-04-09
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

复制构造函数接受单个类类型引用形参,这个形参一般用const修饰。
class A
{ public:
A();;
A(const A&);
//.........
};
一般的类,编译器合成的构造函数就能完成必要的工作。担当类有一个数据成员是指针,或者成员表示在构造函数中分配的其他资源;在创建新对象时必须做一些特定工作。这两种情况必须定义复制构造函数

复制操作符重载,由operator后面跟所定义的操作符符号,通过定义名为operator=函数来对赋值进行定义。该操作符函数有两个形参:第一个形参对应左边的操作数(隐式绑定到this指针了),第二个形参对应右操作数。返回类型应该与内置赋值运算返回的类型相同,内置类型的赋值运算返回对右操作数的引用,赋值操作符也返回对同一类型的引用。
class B
{
public:
B& operator=(const B &);
};

可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。一般来说,如果类需要复制构造函数,也就需要赋值操作符。



查看完整回答
反对 回复 2019-04-09
?
喵喔喔

TA贡献1735条经验 获得超5个赞

形式上不一样,本质一样
都是为了防止,浅拷贝带来的错误
用的时机不懂
既然是构造函数,所以就是在初始化使用的, 重载赋值操作符就是赋值时用的

查看完整回答
反对 回复 2019-04-09
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

假设你有一个类A,和一个已有的类对象b时
当你执行A a=b来创建对象a时调用的是拷贝构造函数,
当你执行A a;a=b时调用的是运算符重载
就功能而言,感觉差别不大

查看完整回答
反对 回复 2019-04-09
  • 4 回答
  • 0 关注
  • 721 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信