//代码摘自http://www.cplusplus.com/reference/new/operator%20new/
#include<string>
using std::string;
#include <iostream> // std::cout
#include <new> // ::operator new
struct MyClass {
int data[2];
MyClass() {int i=2;}
};
int main () {
MyClass * p1 = new MyClass;
// allocates memory by calling: operator new (sizeof(MyClass))
// and then constructs an object at the newly allocated space
MyClass * p2 = new (std::nothrow) MyClass;
// allocates memory by calling: operator new (sizeof(MyClass),std::nothrow)
// and then constructs an object at the newly allocate
d space
MyClass * p21=new (p1) MyClass;
// does not allocate memory -- calls: operator new (sizeof(MyClass),p2)
// but constructs an object at p2
// Notice though that calling this function directly does not construct an object:
MyClass * p3 = (MyClass*) ::operator new (sizeof(MyClass));
// allocates memory by calling: operator new (sizeof(MyClass))
// but does not call MyClass's constructor
delete p1;
delete p2;
delete p3;
return 0;
}
MyClass * p1 = new MyClass; push sizeof(Myclass);call new ;call Myclass::Myclass();
MyClass * p2 = new (std::nothrow) MyClass; ;push sizeof(Myclass);push &nthrow ; call new; call Myclass::Myclass();
MyClass * p11=new (p1) MyClass; ;p11=p1; call Myclass::Myclass();
MyClass * p111=p1; ;p111=p1;
--------------------------
@1---- MyClass * p3 = (MyClass*) ::operator new (sizeof(MyClass)); push sizeof(Myclass);call new ;
@2----- MyClass * p11=new (p3) MyClass;
---------------------------- @12= MyClass * p1 = new MyClass;