C++ 构造 & 析构函数 & 初始化列表 & 拷贝

一、构造和析构

功能:

1.1 构造函数功能

构造函数在类实例化对象时用于完成对象成员的初始化,通常包括以下操作:
    为成员变量分配内存空间
    初始化成员变量
    执行类似打开文件、分配资源等额外操作

 1.2 析构函数

主要作用在于对象  销毁前 系统自动调用,执行一些清理工作

 1.3 格式:

构造函数

类名(){}

1. 构造函数与类名同名。

2. 构造函数没有返回值,也不能写 void

3. 构造函数通常设置为  public 权限,以便外部能够调用。

4. 构造函数可以有参数,因此==可以发生重载==

5. 序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次。

6. 如果不写构造函数,编译器会默认提供一个==构造函数==

析构函数

~类名(){}

1. 析构函数,没有返回值也不写 void

2. 函数名称与类名相同,在名称前加上符号 ~ 。

3. 析构函数不可以有参数,因此不可以发生重载。

4. 程序在对象销毁前会自动调用析构,无须手动调,而且只会调用一次

1.4 调用时机

构造函数:在类实例化对象时==自动调用==,不需要也不允许手动调用。

析构函数:在==对象销毁==或者 ==程序结束前== 调用,不需要手动调。

注意 :
1、析构函数可以手动调用 但是一般不这么干
	MyClass obj;
    obj.~MyClass(); // 手动调用析构函数
2、析构函数在堆区 和 栈区的释放方式是不同的
	栈区中 程序结束前 系统自动调用
	堆区中 程序结束不会调用 需要用户手动调用 delete 才能调用堆区空间

 

1.5 构造和析构调用顺序

==面试题==

1、对于堆区对象:

​ 先new那个对象 就先构造那个对象

​ 先delete 那个对象 就先析构那个对象

​ 所以一般不考虑 堆区的构造函数

2、对于栈区对象:

​ 构造函数的调用顺序: 按顺序调用

​ 析构函数的调用顺序:按逆序调用 // 先进 后出 先构造 后析构(栈的顺序)

1.6 栈区与堆区的对象创建:

栈区:

当在栈区创建对象时,构造函数会自动调用。

类名 对象名(构造函数的实参表); // 调用构造函数

堆区:

在堆区创建对象时,需要使用 new<

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值