#include<iostream>
using namespace std;
class A{
int i;
public:
A(int k = 0):i(k){ cout<<"constructor..."<<endl; }
void print() { cout<<i<<endl; }
~A() { cout<<"deconstructor..."<<endl; }
};
int main(){
//下面实现A *p = new A;
A *p;
try{
void *m = ::operator new (sizeof(A));
p = static_cast<A *>(m);
new (p) A(2);//placement new,complier实质这样做: p->A::A(2);
}
catch(bad_alloc){
cerr<<"cannot allocate memory..."<<endl;
}
//test
p->print();
//delete p;//要使唤起deconstractor,p不可以是void*
p->~A();
::operator delete (p);
}
由此我们可以更好的进行new和delete重载。