http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html

new 、operator new 和 placement new 区别

(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* p实际上就是指向一个已经分配好的内存缓冲区的的首地址。

最新文章

  1. Unity游戏内版本更新
  2. Aspen 安装
  3. selenium By.xpath 用法
  4. 如何利用tomcat和cas实现单点登录(2):配置cas数据库验证和cas客户端配置
  5. js语法
  6. Changing the type of a property with EF Code First
  7. 国密SM4对称算法实现说明(原SMS4无线局域网算法标准)
  8. SQL HAVING语句
  9. 《Linux内核设计与实现》读书笔记(七)- 中断处理【转】
  10. iOS 手势大全
  11. mysql锁表和解锁语句分享
  12. 去除jquery.min.map 404错误信息
  13. oracle 10 g 需要启动的2个服务
  14. c语言基础编程
  15. # 20175333曹雅坤《Java程序设计》第七周学习总结
  16. C++ 初步
  17. 在cron运行hive时,无法打出mapreduce日志
  18. MySQL: Connection Refused,调整 mysql.ini中的 max_connections
  19. 关于动态加载js
  20. Shell编写8点建议

热门文章

  1. poj3041——最小点覆盖
  2. PCB Genesis 鼠标滚轮缩放与TGZ拖放 插件实现
  3. LeetCode.5-最长回文子串(Longest Palindromic Substring)
  4. c#调用带有自定义表结构的存储过程
  5. C#:设置webBrowser框架与系统相对应的IE内核版本
  6. 前端编码规范(2)HTML 规范
  7. Android开机图片替换
  8. VS2012快捷操作功能
  9. vs2015网站部署到iis后运行调试:无法在web服务器上启动调试的问题,403已禁止
  10. C# 获取所有网卡信息