什么时候可以用delete替代delete[]
2024-10-12 06:49:20
针对gcc编译器
C++内存分配和释放函数
//分配单个对象
operator new(std::size_t size)
//分配数组对象
operator new[](std::size_t size)
这两个函数都有size参数,作为传入要分配空间的大小,内部实现完全一样。只不过在分配数组空间之前,会在前面的空间,填入数组空间的大小。下面我猜测的伪代码
new Object[int size]{
if(trival(Object析构函数)){
Object *ptr = operator new[](size * sizeof(Object));
for(int 0-> size){
构造函数(ptr);
}
return ptr;
}
//析构函数有用,
//需要析构的时候需要找到找到每个对象的this指针
//因此在返回地址的前(-8,-4)个字节保存对象的大小
else{
//比没有用户自定义的析构函数多8个字节
Object *ptr = operator new[](size * sizeof(Object) + 8);
*(int *)(ptr) = size;
return ptr + 8;
}
}
根据上面的分析,我们知道了只有析构函数有用(non-trival)的Object,operator new[]才回在前面保存分配的数组个数。
什么时候可以用delete替换delete []
- 内置类型
- 用户自定义类型,但是有non-trival析构函数
最新文章
- Spring 配置解析之Properties
- 吉他笔记 solo 和弦 推弦 音程
- windows自动修改ip的bat文件
- XListView刷新
- PB建数据窗口的时候会报内存错误
- chmod 命令——chmod 755与chmod 4755区别(转)
- C#隐藏桌面图标和任务栏
- J2EE
- 2013年全球IT公司市值排行榜
- 关于RequestDispatcher的原理
- mui 区域三级联动
- 201621123043 《Java程序设计》第3周学习总结
- 2018-2019-2 网络对抗技术 20165206 Exp3 免杀原理与实践
- 由AbstractQueuedSynchronizer和ReentrantLock来看模版方法模式
- docker 14 dockerfile自定义mycentos
- 1.5 socket服务器传输文件
- 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)
- php正则字符串提取汉字
- POJ 2456 Aggressive cows(二分答案)
- Android实现不同Active页面间的跳转
热门文章
- OVS 总体架构、源码结构及数据流程全面解析
- 观未见,行不止 —— Power BI 两周年技术和方案交流圆桌会议纪实
- Learning to Rank算法介绍:GBRank
- mongodb 3.4 集群搭建:分片+副本集
- idea svn 的使用----转载,挺好的
- maven项目启动报:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 错误解决方法-杜恩德
- java爬虫简单实现
- mongodb命令行基础语法
- lua的通用print函数
- 本地如何操作服务器的mysql,详细教程