#include <iostream>
#include <cstdlib>
using namespace std;
class Base{
public:
Base(int n):_A(n){
_A = n;
}
Base(){
_A = -1;
}
static void* operator new(size_t size, void* p, int n){
cout<< "size:"<<size<<endl;
cout<< "n:"<<n<<endl;
return p;
}
static void* operator new(size_t size, void *p){
cout<<" static void* operator new(size_t size, void *p)- >"<<size<<endl;
return p;
}
static void* operator new(size_t size){
cout<<"static void* operator new(size_t size)->"<<size<<endl;
return malloc(size);
}
void show(){
cout<<"_A:"<<_A<<endl;
}
private:
int _A;
int b;
};
int main(){
Base* p2 = nullptr;
Base* p= (Base*)malloc(sizeof(Base));
cout<<"sizeof(Base)->"<<sizeof(Base)<<endl;
cout<<"p->"<<p<<endl;
new(p)Base(20);
p->show();
cout<<"-------------"<<endl;
p2 = new Base(100);
p2->show();
cout<<"p->"<<p<<endl;
cout<<"p2->"<<p2<<endl;
cout<<"-------------"<<endl;
Base obj(2);
obj.show();
new(&obj)Base(20);
obj.show();
return 0;
}