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

如题所述

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


他们的区别:

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

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

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

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

可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。一般来说,如果类需要复制构造函数,也就需要赋值操作符。
第2个回答  2013-06-12
形式上不一样,本质一样
都是为了防止,浅拷贝带来的错误
用的时机不懂
既然是构造函数,所以就是在初始化使用的, 重载赋值操作符就是赋值时用的
第3个回答  2013-06-12
假设你有一个类A,和一个已有的类对象b时
当你执行A a=b来创建对象a时调用的是拷贝构造函数,
当你执行A a;a=b时调用的是运算符重载
就功能而言,感觉差别不大

c++中拷贝构造函数和赋值运算符有哪些不同
拷贝构造函数和赋值运算符的行为比较相似,都是将一个对象的值复制给另一个对象;但是其结果却有些不同,拷贝构造函数使用传入对象的值生成一个新的对象的实例,而赋值运算符是将对象的值复制给一个已经存在的实例。这种区别从两者的名字也可以很轻易的分辨出来,拷贝构造函数也是一种构造函数,那么它的...

C++中构造函数,拷贝构造函数和赋值函数的区别和实现
构造函数是生成对象时初始化数据的,拷贝在用一个已存在的对象生成另一个对象时调用,赋值随时可以调用,主要用来给属性赋值

...给该类的另一个对象时,为什么不调用拷贝构造函数?
如果是创建和赋值在一个语句,那么调用的是构造函数,例如:A a1;A a2 = a1;\/\/调用拷贝构造,如果没有实现,那么默认按内存拷贝 其实这等同于A a2(a1);如果不是这种情况,比如:A a3;a3 = a1;\/\/调用重载的=操作符,如果没有实现,也是按内存拷贝。

C++ 语言 operator函数 意思 用法
上面的代码中的 operator* 和operator= 就是分别对*和=进行运算符重载 自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会...

关于C++重载运算符
① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。运算符重载可以使用成员函数和...

C++中,对象为何能被赋值,想不通。被赋值时,它执行的流程顺序是怎样的...
赋值运算符“=”只能用来对单个的变量赋值,现在被扩展为两个同类对象之间的赋值,这是通过对赋值运算符的重载实现的。实际这个过程是通过成员复制来完成的,即将一个对象的成员值一一复制给另一对象的对应成员。对象赋值的一般形式为 对象名1 = 对象名2;注意对象名1和对象名2必须属于同一个类。例如 S...

拷贝构造函数```求助`~~~
事实上,拷贝构造函数是由普通构造函数和赋值操作符共同实现的。描述拷贝构造函数和赋值运算符的异同的参考资料有很多。 拷贝构造函数不可以改变它所引用的对象,其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝...

...一定要重写拷贝构造函数和赋值运算符,不要使用默认的。
默认的拷贝构造函数和赋值函数是浅拷贝 相当于两个对象的成员指针变量共同指向一片内存首地址,这样会导致当一个对象修改这片内存时 另外一个对象也会受到影响 可以参考下这篇文章http:\/\/blog.csdn.net\/bluescorpio\/article\/details\/4322682

黑马C++笔记 5.5 运算符重载
5.5.4 赋值运算符=的重载替换set()函数,C++为类默认提供四种赋值相关函数,但对指向堆区的指针进行赋值时,可能引发内存问题,如浅拷贝导致的内存泄漏。通过深拷贝来解决这个问题。5.5.5 关系运算符如==、!=等用于自定义类型间的比较,重载后可以进行对象间的比较操作。关系运算符的默认行为可通过...

C++中的拷贝构造函数(Copy Constructor)
本文为C++构造函数和赋值运算符系列的一部分,主要讲述了拷贝构造函数的相关内容。拷贝构造函数是一种特殊类型的构造函数,它允许使用同一类型的实参进行调用,并复制该实参的内容,而不会修改实参本身。拷贝构造函数有多种写法,包括单形参列表和多形参列表。其中,单形参列表的拷贝构造函数主要有四种写法,...

相似回答