首页 > 其他 > 详细

placement new

时间:2015-09-22 06:38:27      阅读:298      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!