拷贝构造函数剖析_堆与拷贝构造函数

2020-02-29 其他范文 下载本文

拷贝构造函数剖析由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“堆与拷贝构造函数”。

拷贝构造函数剖析

在讲课过程中,我发现大部分学生对拷贝构造函数的理解不够深入,不明白自定义拷贝构造函数的必要性。因此,我将这部分内容,进行了总结。

拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。功能:使用一个已经存在的对象始初化同类的一个新对象。这样得到对象和原来的对象具有完全相同的数据成员,即相同的属性。

拷贝构造函数的函数原型:

A(const A& other){ … … }

拷贝构造函数的应用场合:

当用类的一个对象去初始化该类的另一个对象时;若函数的形参为类对象,调用函数时,实参赋值给形参;当函数的返回值是类对象时。比如:

A a1(10);

A a2 = a1;

A a3(a1);// 构造函数 // 拷贝构造函数 // 拷贝构造函数

默认拷贝构造函数:成员变量之间的“值”拷贝

编写拷贝构造函数的必要性

cla A

{

public:

A(const char* data)

{

name = new char[strlen(data)+ 1];

strcpy(name, data);

}

A(const A& other)

{

name = new char[strlen(other.name)+ 1];

strcpy(name, other.name);

}

private:

char* name;

};

考察:char* data = “abcd”;A a1(data);A a2 = a1;

如果未定义拷贝构造函数,会有何种后果?

现将a1赋给a2,缺省拷贝构造函数的“位拷贝”意味着执行a2.name = a1.name。这将造成二个错误:一是a2.name和a1.name指向同一块内存,任何一方变动都会影响另一方;二是在对象被析构时,name被释放了两次。

《拷贝构造函数剖析.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
拷贝构造函数剖析
点击下载文档
相关专题 堆与拷贝构造函数 函数 堆与拷贝构造函数 函数
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文