placement new

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的使用方法。

原文地址:https://www.cnblogs.com/qionglouyuyu/p/4827849.html