C++中 delete 与 delete[]的差别

对于简单的数据类型而言delete与delete[]是等价的,例如:

int* pInt = new int[20];

if (pInt)

{

    delete [] pInt; // 等价于delete pInt

    pInt = NULL;

}

 

但是如果是一个动态分配数据类型则不同,delete[]在释放数组空间之前对数组的每一个对象调用析构函数,而delete则仅仅释放指针所指的空间。在控制台运行以下程序,比较结果。例如:

 

// --------------------------------------
// main.cpp
// --------------------------------------

#include <iostream>

 

class CStudent

public:
    CStudent() 
    {
        m_pszName = new char[256];
    }
 
    ~CStudent()
    {
        delete m_pszName;
    }
 
private:
    char* m_pszName;
    int  m_nAge;
};

void main()
{
    CStudent* pStudent = new CStudent[10];

 

    if (pStudent)
    {
         delete [] pStudent; // 如果使用delete会造成意想不到的结果,内存存在泄露
         pStudent = NULL;
    }

 

    system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值