初次接触到placement new,在在看安卓的audio模块代码,代码片段如下 :
// construct the shared structure in-place.mBuffer = sharedBuffer->pointer();
tracks.cpp at 150 to 159 line.
看了半天也不知道 new(mCblk) audio_track_cblk_t() 是什么意思,后来查资料才知道,这是c++的placement new,在已经分配的内存区域上新建对象的一种方式。
class MyClass {
public MyClass(para){};
.
.
.
};
1.new operator,new操作符。从堆中分配一个对象并且初始化。
MyClass *p=new MyClass(para);
跟其他操作符比如+ ,-,*,/ 一样,是由c++语言定义的,不能改变不能重载。
new操作符实际上执行如下3个过程:
(1).调用operator new 分配内存
(2).调用构造函数初始化类对象
(3).返回相应指针
2.operator new ,new操作符的第一个功能。全局的new操作声明如下:
void * operator new(size_t size);
这是一个函数声明,在c++内部可以通过函数重载改变这个函数的功能,可以根据实际的需求改变分配空间的方式。
void *p =operator new(bufferSize);
只是分配了一个大小为buffersize的内存,等同于c里面的malloc
3.placement new,在已经分配好的空间上,创建一个指定的对象
eg: void *buffer = operator new(1024);
MyClass * creat(void *buffer,para)
{
return new(buffer) MyClass(para); //创建时手动调用构造函数,释放时手动调用析构函数。
}
参考博客:
http://blog.csdn.net/wudaijun/article/details/9273339
http://www.cnblogs.com/younes/archive/2010/04/26/1721528.html