码迷,mamicode.com
首页 > 其他好文 > 详细

placement new

时间:2015-09-22 06:40:53      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

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

placement new

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!