c++中的placement new操作符学习
参考文献:http://blog.csdn.net/zhangxinrun/article/details/5940019
new操作符:
例子如下:int * pint=new int(23);它先在堆上分配内存空间;接着初始化这个内存空间;最后返回此指针。
对于此操作是可以重载的,记住是只能在类中被重载,得到了一个重载版本为placement new (旧版本是operator new),原型如下void *operator new( size_t, void *p ) throw() { return p; },应用:MyClass * pClass=new(p) int(23);形式上和原版是不同的,它的功能只是实现已有内存的指针p上进行构造一个int的对象。
比较:
显然此处少去了内存空间分配过程,节约了内存搜索的过程了;至于内存的申请之类的可以有其他函数来完成,比如就用以前的new,而只是在它空间上进行重新指定,而不需要销毁,再次重新分配。
注意:
此处内存可以在堆中,当然也可以在栈中;此处是new,对于new[] ,delete ,delete[]都类似的处理。