C++ 面向对象(构造 & 析构函数)

二、构造 & 析构函数

2.1 构造和析构

2.1.1 功能

构造函数功能

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

析构函数功能

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

2.1.2 格式

构造函数

类名( ) { }

  1. 构造函数与类名同名。
  2. 构造函数没有返回值,也不能写 void
  3. 构造函数通常设置为 public 权限,以便外部能够调用。
  4. 构造函数可以有参数,因此==可以发生重载==
  5. 序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
  6. 如果不写构造函数 , 编译器会默认提供一个==构造函数==

析构函数

~类名( ){ }

  1. 析构函数,没有返回值也不写void
  2. 函数名称与类名相同,在名称前加上符号 ~
  3. 析构函数不可以有参数,因此不可以发生重载
  4. 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次

2.1.3 调用时机

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

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

注意 :
1、析构函数可以手动调用 但是一般不这么干
    MyClass obj;
    obj.~MyClass(); // 手动调用析构函数


2、析构函数在堆区 和 栈区的释放方式是不同的
    栈区中 程序结束前 系统自动调用
    堆区中 程序结束不会调用 需要用户手动调用 delete 才能调用堆区空间
 

2.1.4 构造和析构调用顺序

2.1.1.1 对于堆区对象:

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

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

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

2.1.1.1 对于栈区对象:

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

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

2.1.5 栈区与堆区的对象创建

栈区:

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

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

堆区:

类名 *指针名;        // 这一步不会调用构造函数
指针名 = new 类名();  // 这个时候才调用构造函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值