delete单个对象和对象数组时的区别

C++中 delete对象和对象数组时的区别

首先**C++**在回收用new分配出来的单个对象的内存空间时,直接用delete;回收用new分配出来的对象数组内存空间时,需要使用delete[]。

  • 调用new所包含的动作:从系统申请一块内存,并调用对象的构造函数;
  • 调用delete所包含的动作:先调用对象的析构函数,再释放内存归还系统;
  • 调用new[n]所包含的动作:从系统申请可容纳n个对象的内存空间,并调用n次构造函数来初始化这n个对象;
  • 调用delete[]所包含的动作:先调用n次对象的析构函数,然后再释放内存;

示例代码如下:

#include<iostream>
using namespace std;
 
class Student {
public:
    Student(){
        cout<<"Constructor"<<endl;
    }
    ~Student(){
        cout<<"~Constructor"<<endl;
    }
}
int main() {
    Student* stu=new Student();
    delete stu;
    stu=nullptr;
 
    cout<<"--------"<<endl;
 
    Student* stuArr=new Student[2];
    delete[] stuArr;//不要漏了[]
    stuArr=nullptr;
 
    return 0;
}
运行程序,输出:
Constructor
~Constructor
--------
Constructor
Constructor
~Constructor
~Constructor

注意:若将delete[] studArr改为delete stuArr,则会导致stuArr指向的2个Student对象中的剩余一个未被销毁,造成内存泄露

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值