复制建构函式是类别的建构函式之一,在类别物件中为类别物件指定值时会呼叫此建构函式(英文名称为Copy-Constructor)。
(一)认识拷贝构造函数
它的一般定义如下(粗体显示部分):
class Integer{
int i;
static int count;
Integer(int pi):i(0){
count++;
this->i = pi;
}
Integer(const Integer& ii):i(0){
this->i=ii.i;
count++;
}
};
int Integer::count = 0;
int main(){
Integer one(1);
Integer two = one;
}
其中常量Integer型引用 ii 代表赋值操作中右边的操作数。也就是例子中main函数里的one。
(二)为什么需要拷贝构造函数以及什么时候需要自定拷贝函数
很明显,通过赋值操作(拷贝)产生的对象,其初始化与普通对象的初始化过程必须是不一样的。例子里面的Integer two,通过Integer one拷贝生成,在没有自定义拷贝函数的前提下,它的成员变量和one的成员变量值,是一模一样的。这个时候,编译器会生成并调用默认拷贝构造函数,这个构造函数做的事情,就是位拷贝,也就是把one对象里的所有数据,原封不动等复制到two对象中。
然而,为拷贝通常满足不了用户的需求。上面例子中,程序希望通过静态类变量count来统计所有Integer对象的个数。如果移去粗体部分的自定义拷贝构造函数,count的值永远是1,如论通过拷贝的方式产生了多少对象。显然,这不是程序设计者希望看到的结果。
另外一个用途就是在拷贝的时候,处理指针,引用等地址对象时,使用位拷贝往往不是设计者的初衷。
(三)继承中的拷贝构造函数
构造函数,拷贝构造函数和operator=重载函数,不属于类继承时被派生类继承的函数之列。
另外,由于类赋值操作会默认调用到拷贝构造函数,一些在operator=重载函数实现的逻辑,也可以被挪到拷贝构造函数当中
1.文章《拷贝构造函数为什么不用指针参数》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《拷贝构造函数为什么不用指针参数》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好