什么时候可以用delete替代delete[]
针对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析构函数
什么时候可以用delete替代delete[]的更多相关文章
- 【转】 C++中delete和delete[]的区别
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...
- C++:delete和delete[]释放内存的区别
C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]. 关于 new[] 和 delete[], ...
- C++中delete和delete[]的区别
C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]. 关于 new[] 和 delete[],其中又 ...
- 关于delete和delete[]
[精彩] 求问delete和delete[] 的区别??http://www.chinaunix.net/jh/23/311058.html C++告诉我们在回收用 new 分配的单个对象的内存空间的 ...
- svn local delete, incoming delete upon update 解决办法
经常有人会说,树冲突是很难解决的一类冲突,其实一旦了解了其原理,要解决也不难.先回顾下对于树冲突的定义. 树冲突:当一名开发人员移动.重命名.删除一个文件或文件夹,而另一名开发人员也对它们进行 ...
- C++中delete 和delete[]的区别
c++告诉我们在回收new分配的单个对象的内存空间的时候用delete, 回收new[ ]分配的一组对象的内存空间的时候用 delete[ ]; #include <iostream> ...
- C++ delete 和 delete []
C++ delete 和 delete [] 简单结论: new delete new [] delete [] 文章 : 对 delete [] 的声明 void operator delete ...
- 为什么new的普通数组用delete 和 delete[]都能正确释放
由同事推荐的一篇博客: 为何new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样-------_CrtMemBlockHeader 文章解释了delete 内 ...
- C++ 中 delete 和 delete[] 的区别
一直对 C++ 中 delete 和 delete[] 的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++ 告诉我们在回收用 new 分配的单个对象的内存空间时用 de ...
随机推荐
- shell脚本小案例
1.获取远程ftp数据到本地目录 #!/bin/bash ftp -n<<! open 135.0.24.19 user exchange exchange binary cd /idep ...
- 详细:idea如何设置类头注释和方法注释
IntelliJ IDEA 类注释和自定义方法注释 来源:https://my.oschina.net/baishi/blog/617478#navbar-header intellj idea的 ...
- 【HTML5】音频视频
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- H5+混合移动app应用开发——开篇
前言 经过2个多月的艰苦奋斗,app的第一个版本已经快完工了,期间遇到了太多的坑,作为一个喜欢分享的人,我当然不会吝啬分享这爬坑历程.不要问我有多坑,我会告诉你很多,很多..... 过去一直从事.ne ...
- 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓
汇聚了来自全球的 Unity开发者.发行商.培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日-13日在上海·国际会议中心隆重举行.Unite 大会是由 Unity ...
- 【算法】论平衡二叉树(AVL)的正确种植方法
参考资料 <算法(java)> — — Robert Sedgewick, Kevin Wayne <数据结构> ...
- http性能测试工具wrk源码学习之开篇
1.前言 最近工作需要测试nginx反向代理的性能,于是找了一些http测试工具,例如经典的Apache的ab.siege.wrk.wrk使用多线程事件驱动方式,支持lua脚本扩展.关于wrk介绍可以 ...
- bzoj 2565: 最长双回文串
Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同).输入 ...
- 30分钟入门Java
技术只是工具,文档只是说明书,仅此而已. 写在前面 工作4年有余,盲人摸象般的走过弯路,也投机取巧的领悟到过一些类似"编程本质"的东西.现在开始我计划回顾下我的编程生涯.在这里分享 ...
- TensorFlow 代码行统计
https://github.com/tensorflow/tensorflow.git