2.2.2、为单个的类重载 new[]和 delete[]
必须小心对象数组的分配。你可能希望调用到被你重载过的 new 和 delete 操
作符,但并不如此。内存的请求被定向到全局的 new[]和 delete[] 操作符,而这
些内存来自于系统堆。
C++将对象数组的内存分配作为一个单独的操作,而不同于单个对象的内存分配。
为了改变这种方式,你同样需要重载 new[] 和 delete[]操作符。
class TestClass{
public:
void* operator new[](size_t size);
void operator delete[](void*p);// .. other members here ..};
void*TestClass::operatornew[](size_t size){
void *p =malloc(size);
return(p);
}
void TestClass::operator delete[](void*p){
free(p);
}
int main(void){
TestClass *p =new TestClass[10];// ... etc ...
delete[] p;
}
但是注意:对于多数 C++的实现,new[]操作符中的个数参数是数组的大小加上
额外的存储对象数目的一些字节。在你的内存分配机制重要考虑的这一点。你应
该尽量避免分配对象数组,从而使你的内存分配策略简单。