OOP笔记 —— 析构函数

析构函数(Destructor)

eg:   ~Book () { }

Rules:
  1. ~(tilde sign) 开头
  2. 和class名称一样
  3. 无返回值(和constructor一样)
  4. 不接受任何参数
  5. 是class的public member function
  6. 一个class只有一个destructor(constructor可以有多个)
  7. destructor不能手动的显式调用,它会在最后自动调用的

关于Destructor非常重要的一点:

在class中涉及到指针、动态内存分配(new操作符)时,必须要自行去定义析构函数了【加入delete操作】。同时,只要涉及到指针,也必须去定义copy constructor和assignment operator。否则,会引起memory leak。

关于在析构函数中的delete操作:

eg:  ~Book () {

        delete [ ] ptr;

        ptr = nullptr;

}

基本用法:  

1. 释放单个对象(可以是基本类型or类类型):delete 指针名

int* p = new int; // 动态分配一个整数
* p = 42;
delete p; // 释放分配的内存
p = nullptr; // 将指针设置为 nullptr 防止悬挂指针

2. 释放数组:delete [ ] 指针名

这里的数组,必须是new [ ] 这样创建的

int* arr = new int[10]; // 动态分配一个整数数组
for (int i = 0; i < 10; ++i) {
    arr[i] = i * 10;
}
delete[] arr; // 释放分配的数组内存
arr = nullptr; // 将指针设置为 nullptr 防止悬挂指针

注意事项:

1. 防止悬挂指针在调用 delete 后,将指针设置为 nullptr 是一个好的实践,以避免悬挂指针(指向已释放内存的指针)

2. 避免重复释放内存: 重复调用 deletedelete[] 释放同一块内存会导致未定义行为,通常会导致程序崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值