new[]与delete[]

(要理解之前关于new,delete的一些概念,看​​​​​​

CSDN

引子:

相比new,new[]不仅仅是个数的增加,还有int大小记录空间的创建,

下图中错误的用模拟多个new来替代new[],释放步骤一样。

为什么按照new的逻辑写,并且正常全部析构会析构那么多次?

一,operator new[]

new的底层是operator new与构造函数,operator new的底层是malloc与异常识别

delete的底层是析构函数与operator delete,operator delete的底层是free与异常识别

operator new[]的底层是operator new[]与所有对象的构造,operator new[] 的底层是operator new,和数组个数记录空间创建操作

operator delete[]的底层是所有对象的析构与operator delete[],operator delete[]底层是operator delete和指针记录空间的跳转和后移操作

---------------------------------------------------------------------------------------------------------------------------------

operator new[ ]实质做的:(加上构造为new[ ]做的)

delete[ ]实质做的:

---------------------------------------------------------------------------------------------------------------------------------

对引子的解答:

new只比malloc多了个异常检测,不会额外开辟空间告诉delete[]要析构的次数,(其目的本也就是定义构造单个对象),所以,再调delete[],依然会向前int大小空间找析构次数,这没初始化的空间当然是随机值,可能很大可能很小,谁知道delete[]会析构多少次。

总结:new,delete最好对单个对象使用。

new[],delete[]对多对象使用,防止莫名奇妙的bug。(new[],delete[]该凑一对儿)

---------------------------------------------------------------------------------------------------------------------------------

malloc,free,new,delete,new[],delete[]可以混用的总结:(最好不要)

(内置类型和自定义类型中只有内置类型)且不需初始化:malloc,free,new,delete,new[]这几个可以混用,但不能使用异常检测,可能new[]会浪费空间。(要搞单个还是数组从中选)

自定义类型无要释放的资源要初始化(可参考我的另一篇):new,delete,new[]。

--->这些只是没有问题,但写这样代码很丢人,别用。

建议:

单个:new,delete

多个:new[],delete[]

相关推荐

  1. C++:newdelete

    2024-04-22 13:26:04       18 阅读
  2. c++的newdelete

    2024-04-22 13:26:04       34 阅读
  3. c++中的newdelete

    2024-04-22 13:26:04       46 阅读
  4. [C++] newdelete

    2024-04-22 13:26:04       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 13:26:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 13:26:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 13:26:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 13:26:04       20 阅读

热门阅读

  1. LeetCode279 完全平方数

    2024-04-22 13:26:04       15 阅读
  2. Vue3中props的原理与使用

    2024-04-22 13:26:04       13 阅读
  3. http、https、json编程

    2024-04-22 13:26:04       18 阅读
  4. 人工智能安全与光明时代

    2024-04-22 13:26:04       16 阅读
  5. 用Bash变量进行sed替换

    2024-04-22 13:26:04       16 阅读
  6. 在Bash中如何提取子字符串

    2024-04-22 13:26:04       17 阅读
  7. 负载均衡的原理和算法

    2024-04-22 13:26:04       15 阅读
  8. css3中有哪些伪选择器?

    2024-04-22 13:26:04       17 阅读
  9. PotCSS

    2024-04-22 13:26:04       17 阅读
  10. Hbase 伪分布式安装 - UbuntuServer2204

    2024-04-22 13:26:04       10 阅读