关于C++,我知道的还太少--学习placement new

对于c++我们都知道可以用new来构造对象,delete释放内存。

大家也用的不亦乐乎,其实在一般的项目中知道这些差不错的语法知识也够用了。

但是总有人会更加深入的去了解,去发现。

 

c++语法不复杂,但是由这些语句组成的物品才复杂。

像造车子一样本来我们造车很方便的,选择木头,把木头做成圆圆的车轮,然后做好车架放在车轮中间的轴上,前面放一匹草泥马或者李刚。

可是后来变的越来越复杂,就一辆轿车而言,他的轮胎的工艺就复杂的不得了,以及轮胎与车之间的接口怎么定义。

轮胎可能是A公司造的,车轴可能是B公司造的,然后进行搭配组装。

 

今天我就学习了C公司重载的placement new。

对于老牛们来讲,他们当然是很清楚,但是肯定有很多人并不知道还有这种new存在。

这个placement new是operator new的一个重载版本,它的作用是在已经分配好的内存中构造一个新的对象。

 

placement new是在STL<new>中定义的。下面就上代码,来看他的使用方法。

//自己定义的一个类
class CTask
{
public:

 CTask()
 {

 }

 ~CTask()
 {

 }

 void run()
 {
  cout<<"Task run access!"<<endl;
 }
};

 

int main()

 

//placement new的使用方法

//1、提前分配缓存
 void *buf = ::operator new(sizeof(CTask));

 

//2、分配对象
 CTask *ptask = new(buf)CTask;

 

//3、使用对象

 ptask->run();

 

//4、销毁对象
 ptask->~CTask();

 

//5、释放内存
 delete[] buf;

 };

 

placement new主要适用于:

在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;

长时间运行而不被打断的程序;

以及执行一个垃圾收集器(garbage collector)。

 

华丽分割线===================================================================

轻轻听综合圣经软件: http://www.qingqingting.com/

迦南旺铺: http://KanGuoLai.taobao.com/

 

 

posted on 2010-10-28 10:57  轻轻听  阅读(611)  评论(2)    收藏  举报

导航