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可变数组