什么时候可以用delete替代delete[]

news/2024/7/24 4:03:11 标签: c/c++

针对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 []

  1. 内置类型
  2. 用户自定义类型,但是有non-trival析构函数

转载于:https://www.cnblogs.com/biterror/p/7053412.html


http://www.niftyadmin.cn/n/1542372.html

相关文章

nuxt开发个人博客完结(代码已开源)

项目地址,喜欢的可以star github地址 项目效果图

SQL Server 2005报表服务入门(一)

源文地址:http://www.cnblogs.com/bluesky7305/archive/2007/10/23/934455.html 一、创建并部署基本报表 在开发程序中,报表总是一件繁琐工作。其实报表就是格式化数据输出,真正需要编程的地方很少。而且报表工具也比较繁琐, 要编…

用JS写的一个简单的时钟

没什么技术含量&#xff0c;单纯的想传上去。手痒了 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>AAA</title> <script> function startTime(){var todaynew Date();var htoday.getHours();var mtoday.g…

Vue3.0beta版本实战小demo(ref reactive torefs computed watch watcheffect vuex router)

项目首页截图 github地址 觉得写的还不错的可以给一个star

反射学习系列-反射实例应用

http://www.cnblogs.com/nuaalfm/archive/2008/09/08/1286640.html 转载于:https://www.cnblogs.com/wangshijie/archive/2009/05/14/1456467.html

经常使用的C#代码(每日更新)

欢迎使用该软件&#xff0c;软件中包括了经常使用的代码。而且每日更新。该软件还在开发中&#xff0c;O(∩_∩)O~ 目的&#xff1a; 1.提高工作效率 2.格式化代码&#xff0c;方便阅读 3.必备工具 4.偷懒专用 点击下载 无法下载请点击下面链接 http://pan.baidu.com/s/1gdQYNa…

详解Vue响应式原理

什么是响应式 我们先来看个例子&#xff1a; <div id"app"><div>Price :&#xffe5;{{ price }}</div><div>Total:&#xffe5;{{ price * quantity }}</div><div>Taxes: &#xffe5;{{ totalPriceWithTax }}</div><…

六、Flash Media Server3.5流传输实时视频

初学者系列教程的第六篇。此文告诉你如何组合使用Adobe Flash cs4 Professional和Adobe Flash Media Live Encoder3和Adobe Flash Media Server3.5创建来自网路摄影等的实施视频流。 作为一个乐于花费大量的时间在Flash上的Flash教师&#xff0c;我喜欢告诉我的学生如何在Flash…