delete运算符

和new运算符不一样,delete运算符不能重载。在构造对象的时候,我们可以有多种分配内存的方式(通过new运算符的重载实现)和多种初始化内存的方式(通过重载构造函数实现),但当对象要销毁的时候,只存在唯一的选择: delete p;

这样做的理由是,在构造对象的那一点,在原则上你知道所有东西,而当到了删除它的时候你剩下的不过是一个指针,这个指针正好也可以是不是这个对象的类型。
当用户通过基类的指针去删除一个派生类的对象时,为了使析构函数能够正确的释放掉内存,我们需要定义一个虚的析构函数。
数组的释放:
C++从C那里继承了一个问题:
指针可以指向个别对象,也可以指向一个数组的初始元素。当指针指向了一个元素的初始元素时,我们常称它指向了这个数组,而数组的分配和释放都是通过这种指针进行的。例如:
void f(X *p1)                            //p1 may point to a individual object or to an array
{
    x *p2 = new X[100];            //p2 points to the array
    //...
}
为了释放数组空间,C++提供了delete[]运算符。
delete[]的某个中间版本曾要求程序员明确的指出数组的元素个数,例如:delete[10] p2;
这种方式很容易引进错误。因为在后来的版本中,维护数组元素个数的负担转到语言的的实现方面,就是说这变成了C++的语言实现者的事,
而不是用C++的程序员的事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值