博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++复制构造函数和赋值符的区别
阅读量:4482 次
发布时间:2019-06-08

本文共 1160 字,大约阅读时间需要 3 分钟。

今天做C++ primer的习题,被复制构造函数和赋值符的区别弄晕了。简单地说,有一道题目如下描述:

class t1;

class t2 = t1;

我先看见有一个等号,以为就是赋值符来做的,其实并不是这样的。做一个实验好了:

class CTest{public: CTest();  //构造函数 CTest(const CTest &); //复制构造函数 CTest & operator = (const CTest &); //赋值符};CTest::CTest(){ cout<<"Constructor of CTest"<

运行的结果如下:

Constructor of CTest

Copy Constructor of CTest
Copy Constructor of CTest
Assign function of CTest

一切都是很显然的了。

总结如下:

复制构造函数与赋值操作符之间的区别

复制构造函数又称拷贝构造函数,它与赋值操作符间的区别体现在以下几个方面
1.从概念上区分:
复制构造函数是构造函数,而赋值操作符属于操作符重载范畴,它通常是类的成员函数
2.从原型上来区分:
复制构造函数原型ClassType(const ClassType &);无返回值
赋值操作符原型ClassType& operator=(const ClassType &);返回值为ClassType的引用,便于连续赋值操作
3.从使用的场合来区分:
复制构造函数用于产生对象,它用于以下几个地方:函数参数为类的值类型时、函数返回值为类类型时以及初始化语句,例如(示例了初始化语句,函数参数与函数返回值为类的值类型时较简单,这里没给出示例)
ClassType a;         //
ClassType b(a);     //调用复制构造函数
ClassType c = a;    //调用复制构造函数
而赋值操作符要求‘=’的左右对象均已存在,它的作用就是把‘=’右边的对象的值赋给左边的对象
ClassType e;
Class Type f;
f = e;              //调用赋值操作符
4.当类中含有指针成员时,两者的意义有很大区别
复制构造函数需为指针变量分配内存空间,并将实参的值拷贝到其中;而赋值操作符它实现的功能仅仅是将‘=’号右边的值拷贝至左值,在左边对象内存不足时,先释放然后再申请。当然赋值操作符必须检测是否是自身赋值,若是则直接返回当前对象的引用而不进行赋值操作。

 

转自:http://blog.csdn.net/randyjiawenjie/article/details/6666937#

转载于:https://www.cnblogs.com/liushui-sky/p/5920050.html

你可能感兴趣的文章
Hive表文件格式ORC导数
查看>>
malloc_stats---检查内存泄露的神器
查看>>
python之路-day02
查看>>
MySQL查询上一条记录和下一条记录
查看>>
信号量的理解
查看>>
SQLServer
查看>>
[BAT] 通过批处理删除7天前的报告,并删除当前目录下的空文件夹
查看>>
spark cogroup算子
查看>>
lnmp环境搭建(centos6.9+mysql5.7+php7.1+nginx1.10)
查看>>
一个好的开源网站
查看>>
53个要点提高PHP编程效率
查看>>
Ubantu更新hostname & hosts
查看>>
hdu 1013 Digital Roots
查看>>
js中this的使用
查看>>
SQL Server2008 表分区操作详解
查看>>
【算法笔记】B1024 科学计数法
查看>>
[OI学习笔记]树状数组
查看>>
手把手玩转win8开发系列课程(4)
查看>>
android 多线程概述
查看>>
uml类图和er图中主外键的表示区别
查看>>