拷贝构造函数与赋值构造函数(operator=)之区别

原文地址:http://hi.baidu.com/idealsoft/blog/item/b7a80f2a66c2969e023bf6e6.html

 

上面这个小型的例子,是我刚刚为大家编写的,这个例子主要就是为了阐述赋值构造函数与拷贝构造函数之间的区别,其实,我的看法是,赋值构造函数不应该被称为一个构造函数,充其量只能算得上一个重载的操作符函数。 在C语言中,我们知道"=="是判等操作符,而"="却是一个赋值操作符,所以只要没有出现"="操作符,也就不会有赋值操作可言。 我之所以认为赋值构造函数不应该被称为一个构造函数,是因为在调用赋值构造函数的时候,类对象已经存在,自然谈不上构造类对象,它只是对该已经存在的类对象的成员变量进行修改(所谓的赋值)操作。而拷贝构造函数是利用一个已经存在的类对象构造出一个新的类对象。 回到上面的例子,相信大多数人都应该能分清#1、#2、#4所调用的函数,而对于#3,我想着重说明的是:赋值构造的实际用意是修改一个已有的对象,而现在str1还没有被定义,所以此处还是必须要调用拷贝构造函数先产生一个CStr对象。 最后,请大家记住:定义与赋值同时进行的话,必须要先定义,所以必须得先调用拷贝构造函数,而对于符合单纯的赋值操作语法的语句(也就是只有两个操作数的表达式)来说,才是真正的调用赋值构造函数。

猜你喜欢

转载自blog.csdn.net/wyhjia/article/details/6524205