C ++这两个代码制作对象数组有啥区别?

Posted

技术标签:

【中文标题】C ++这两个代码制作对象数组有啥区别?【英文标题】:C++ whats the difference between these two codes to make an array of objects?C ++这两个代码制作对象数组有什么区别? 【发布时间】:2020-11-23 00:54:06 【问题描述】:

我真的对这两行代码感到困惑。它们有什么区别?

一个在堆上,另一个在栈上?

classname *arrayofobjects[50];

classname *arrayofobjects = new classname[50];

【问题讨论】:

【参考方案1】:

classname* arrayofobjects[50]; 声明了一个包含 50 个元素的堆栈数组,其中每个元素的类型为 classname*(指向 classname 的指针)。 classname* arrayofobjects = new classname[50]; 堆分配一个包含 50 个对象 classname 的数组,使用它们的默认构造函数构造它们,并将 arrayofobjects 设置为指向数组第一个元素的指针。 (注意指向第一个元素的指针本质上是数组)

【讨论】:

【参考方案2】:

不同之处在于分配数组(包含 50 个指针)的位置。在通用 C++ 中有两个典型的位置:

a) 自动记忆

b) 动态内存

(在嵌入式系统中可能存在既不是 a 也不是 b 的位置。)

【讨论】:

以上是关于C ++这两个代码制作对象数组有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Objective - C NSArray不可变数组和NSMutableArray可变数组

Javascript将对象推入数组

java中实例化对象和创建对象这两者有啥区别希望大神用代码举例说明便于理解,小弟谢谢了!

java--substring内存溢出问题

数组的循环及跌送方式

为JSON对象中的每个数组添加一个(子)按钮元素到div,并为数组中的每个对象添加子按钮(到数组按钮)