本文主要是介绍new 和operator new,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考
1、http://blog.csdn.net/wudaijun/article/details/9273339
2、http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html
new 、operator new 和
placement new <—-> new( (void*)pBuf) ClassObj(obj)
区别
(1)new :不能被重载,其行为总是一致的。它先调用operator new分配内存,然后调用构造函数初始化那段内存。
new 操作符的执行过程:
1. 调用operator new分配内存 ;
2. 调用构造函数生成类对象;
3. 返回相应指针。
(2)operator new:要实现不同的内存分配行为,应该重载operator new,而不是new。
operator new就像operator + 一样,是可以重载的。如果类中没有重载operator new,那么调用的就是全局的::operator new来完成堆的分配。同理,operator new[]、operator delete、operator delete[]也是可以重载的。
(3)placement new:只是operator new重载的一个版本。它并不分配内存,只是返回指向已经分配好的某段内存的一个指针。因此不能删除它,但需要调用对象的析构函数。
如果你想在已经分配的内存中创建一个对象,使用new是行不通的。也就是说placement new允许你在一个已经分配好的内存中(栈或者堆中)构造一个新的对象。原型中void* pBuf实际上就是指向一个已经分配好的内存缓冲区的的首地址。
这篇关于new 和operator new的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!