C++构造函数,析构函数,拷贝构造函数

本文详细解释了C++中空类的默认行为,包括构造函数用于初始化、析构函数负责清理资源、拷贝构造函数用于浅拷贝。强调了在涉及资源申请时编写特定构造函数的重要性以避免资源泄漏。
摘要由CSDN通过智能技术生成

类的6个默认成员函数

class Data{}

当类中什么都没有时,把它称为空类

当类为空类时,编译器会自动为它生成6个默认成员函数

默认成员函数的定义:用户没有显式实现,编译器会生成的成员函数

1.构造函数,完成初始化工作

2.析构函数,主要完成清理工作

3.拷贝构造,通过同类对象初始化创建对象

4.赋值重载:把一个对象赋值给另一个对象

5.普通对象的取地址

6.const对象取地址

构造函数

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型时由编译器自己调用,以保证每个数据成员都有一个合适的初始值,在对象的整个生命周期内只调用一次。

构造函数的任务是初始化对象

它有如下特性

1.函数名与类名相同

2.无返回值

3.对象实例化时编译器自动调用对应的构造函数

4.构造函数可以重载

5.如果类中没有显式定义构造函数,C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不会自动生成

6.C++把类型分为内置类型(基本类型)和自定义类型。

>>内置类型就是语言提供的类型(比如int,char)

>>自定义类型就是class,struct,union等自己定义的类型

自定义类型实际上又会由内置类型构成

注:在C++11中,内置类型成员变量在类中声明时可以给默认值

7.构造函数中又有默认构造函数,包括无参的构造函数和全缺省的构造函数,并且这两种有且仅有一个一种。

(没有写构造函数,编译器默认生成的函数也叫默认构造函数)

析构函数

概念:析构函数不是完成对对象本身的销毁,局部对象的销毁工作是由编译器完成的。对象在销毁时会自动调用析构函数,完成对象中资源清理的工作

特性:

1.析构函数名是在类名前加上~

2.无返回类型,而且无参数

3.一个类中只能有一个析构函数。如果没有显式定义析构函数,系统会自动生成默认的析构函数

(注:析构函数不能重载)

4.对象生命周期结束时,C++编译系统自动调用析构函数

5.创建某个类的对象则调用该类的构造函数,销毁这个类的对象则调用该类的析构函数

6.如果类中没有申请资源,可以不写析构函数,直接使用编译器自动生成的析构函数,比如Date类。如果有资源申请,那么一定要写析构函数,不然会造成资源的泄漏,比如Stack类。

拷贝构造函数

概念:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在使用已存在的类类型对象->创建新对象时,由编译器自动调用

特征:

1.拷贝构造函数时构造函数的一个重载形式

2.拷贝构造的参数只有一个,而且必须是对类类型对象的引用,使用传值方式编译器会直接报错,因为会引发无穷递归调用(相当于传参时,再次调用该函数)

3.若未显式定义,编译器会默认生成默认的拷贝构造函数。默认的拷贝构造函数对象内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝

(注:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定义类型是调用其拷贝构造函数完成拷贝的)

4.类中没有涉及资源申请时,拷贝构造函数是否写都可以。一旦涉及资源申请时,拷贝构造函数是一定要写的,否则就是浅拷贝

5.拷贝构造典型调用场景

>>使用已存在对象创建新对象

>>函数参数类型为类类型对象

>>函数返回值类型为类类型对象

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值