C++构造函数的类型,浅拷贝与深拷贝实例分析(C++,开发技术)

时间:2024-05-03 20:15:39 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    C%2B%2B%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0%E7%9A%84%E7%B1%BB%E5%9E%8B%2C%E6%B5%85%E6%8B%B7%E8%B4%9D%E4%B8%8E%E6%B7%B1%E6%8B%B7%E8%B4%9D%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90

1.如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。

2.如果用户自定义了带参数的构造函数,若还想调用无参的构造函数,必须显示定义

一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同(基于c++的重载函数原理)

含参的构造函数还可以使用快速初始化的方法:

注意:

初始化参数列表和初始化顺序不可以变动

变量名称(不是参数列表名称)一定要和成员变量名一样

使用已经创建好的同一类对象,进行构造另一个对象。

注意:

但当类中有指针成员时,由系统默认创建该复制构造函数会存在风险,具体原因请查询有关 “浅拷贝“

浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。

例如: person p2 = p1; 这就是浅拷贝,将p1中的成员变量值赋给p2,在这里其实就相当于拷贝构造函数的调用。

但是,浅拷贝,在成员变量是引用类型(指针)时,会出现问题。

传参问题中,地址传递后可以实现swap函数的调用,这就是浅拷贝的原理

当我们使用浅拷贝时,引用类型传递的依旧是地址,这也就是说,拷贝后的对象和拷贝的对象中引用对象指向同一块地址,这样就出现问题了。

在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间。

如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝。

上面提到,如果没有自定义复制构造函数,则系统会创建默认的复制构造函数,但系统创建的默认复制构造函数只会执行“浅拷贝”,即将被拷贝对象的数据成员的值一一赋值给新创建的对象,若该类的数据成员中有指针成员,则会使得新的对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同,delete该指针时则会导致两次重复delete而出错。

本文:C++构造函数的类型,浅拷贝与深拷贝实例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:PHP如何使用chown()函数下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18