赞
踩
new的行为:
先开辟内存空间
再调用类的构造函数
开辟内存空间的部分,可以被重载。
delete的行为:
先调用类的析构函数
再释放内存空间
释放内存空间的部分,可以被重载。
new,delete的重载函数,可以是全局函数,也可以是类内部的公有重载函数;当既有全局的重载函数,也有类内部的公有重载函数时,实际调用的是类内部的公有重载函数。
使用new分配某个重载了new的类的对象空间时,先调用new的重载函数,再调用该类的构造函数,如果该类的构造函数有参数要求,则必须给出对应的实参。
使用了delete释放某个重载了delete的累的对象空间时,先调用类的析构函数,然后再调用重载的delete函数。
可以在任何类说明之外重在new和delete,使它们成为全局的。当new和delete被重载为全局时,C++原来的new与delete被忽略,并且重载的运算符用于所有类型(包括标准型和用户定义类型)的分配要求。
new,delete可以有多种重载方式,但是,new函数的第一个参数一定要是size_t类型(第一个参数size_t即使不使用,也必须有(size_t 表示的是要分配空间的大小)),返回值必须是void *类型。delete的返回值必须是void类型,并且都必须有一个 void 类型的指针作为参数,该指针指向需要释放的内存空间。
重载方式1,new单个对象
void* operator new(size_t sz){
void* o = malloc(sz);
return o;
}
void operator delete(void *o){
free(o);
}
重载方式2,new对象的数组
void* operator new[](size_t sz){
void* o = malloc(sz);
return o;
}
void operator delete[](void *o){
free(o);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。