分析一下
#include <iostream>
using namespace std;
class test{
public:
test(){ cout<<"test()\n"; };
~test(){ cout<<"~test()\n"; };
void* operator new[] (size_t);
void* operator new[] (size_t,int);
void operator delete[] (void*,size_t);
};
void* test::operator new[] (size_t s)
{
cout << "new[" << s << "]";
void* p=::operator new(s);
cout << "=" << p << endl;
return p;
}
void* test::operator new[] (size_t s,int n)
{
cout << "new[" << s << "," << n << "]" ;
return 0;
}
void test::operator delete[] (void* p,size_t s)
{
cout << "delete[" << p << "," << s << "]\n";
::operator delete(p);
}
int main()
{
test* p = new test[3];
delete[] p;
cout<<endl;
p = new test[0];
delete[] p;
cout<<endl;
p = new(0) test[3];
delete[] p;
cout<<endl;
p = new(0) test[0];
delete[] p;
cout<<endl;
}
//output:
//new[7]=00481840
//test()
//test()
//test()
//~test()
//~test()
//~test()
//delete[00481840,1]
//
//new[4]=00481850
//delete[00481850,1]
//
//new[7,0]
//new[4,0]