关于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/
浙公网安备 33010602011771号