placement new就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在自己分配的内存上构建新的对象。
class Foo { float f; public: void set_f( float _f ) { f = _f; } void get_f() { std::cout << "get f val : " << f << std::endl; } };
1)分配内存
char* buff = new char[ sizeof(Foo) * N ]; memset( buff, 0, sizeof(Foo)*N ); //将已开辟内存空间buff 的首 sizeof(Foo)*N 个字节的值设为值 0
2)构建对象
Foo* pfoo = new (buff)Foo; //placement new
3)使用对象
pfoo->set_f(1.0f); pfoo->get_f();
4)析构对象,显式的调用类的析构函数。
pfoo->~Foo();
5)销毁内存
delete [] buff;
上面5个步骤是标准的placement new的使用方法。