delete运算符

来源:互联网 发布:编程大师访谈录 编辑:程序博客网 时间:2024/05/16 05:22

和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++的程序员的事。

0 0
原创粉丝点击