几种new
2024-08-27 05:16:41
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实际上就是指向一个已经分配好的内存缓冲区的的首地址。
最新文章
- Unity游戏内版本更新
- Aspen 安装
- selenium By.xpath 用法
- 如何利用tomcat和cas实现单点登录(2):配置cas数据库验证和cas客户端配置
- js语法
- Changing the type of a property with EF Code First
- 国密SM4对称算法实现说明(原SMS4无线局域网算法标准)
- SQL HAVING语句
- 《Linux内核设计与实现》读书笔记(七)- 中断处理【转】
- iOS 手势大全
- mysql锁表和解锁语句分享
- 去除jquery.min.map 404错误信息
- oracle 10 g 需要启动的2个服务
- c语言基础编程
- # 20175333曹雅坤《Java程序设计》第七周学习总结
- C++ 初步
- 在cron运行hive时,无法打出mapreduce日志
- MySQL: Connection Refused,调整 mysql.ini中的 max_connections
- 关于动态加载js
- Shell编写8点建议