当new自定义类型数组对象的时候,会在返回地址的前面多申请4个字节,存放对象的个数,delete的时候根据对象个数循环调用析构函数,如果对象delete的时候没有析构函数可以使用,那么这个长度信息是不会存在的。
#include <iostream>
class test
{
public:
test(){ std::cout << "constructor" << std::endl; }
~test(){ std::cout << "destructor" << std::endl; }
};
void* operator new[](size_t size)
{
void* p = operator new(size);
std::cout << p << "\t\t" << size << std::endl;
return p;
}
int main()
{
test* t = new test[10];
std::cout << t << std::endl; //如果将析构函数注释掉,那么t的地址和new中申请到的地址是一样的
delete[] t;
system("pause");
return 0;
}