C++ 什么';s Classsname实例[count]之间的差异;C+中的Classname instance=new instance[count]+;?

C++ 什么';s Classsname实例[count]之间的差异;C+中的Classname instance=new instance[count]+;?,c++,C++,我只是想知道它们之间的区别,比如: Student std[2]; 及 我知道第一个类似于一个数组,你为每个索引声明一个新的内存,但是如果你用另一种方法,它有什么不同,当访问类中的成员时又有什么不同 我试着找出类似的问题,但没有成功 提前谢谢 Student std[count];在堆栈上分配,并且需要具有预定(恒定)大小。count必须是编译时常量 学生标准=新学生[计数];会给你错误。“new”操作符在堆上分配内存,并返回指向新分配内存的指针。这允许您在编译时动态分配内存,而无需预先确定大

我只是想知道它们之间的区别,比如:

Student std[2];

我知道第一个类似于一个数组,你为每个索引声明一个新的内存,但是如果你用另一种方法,它有什么不同,当访问类中的成员时又有什么不同

我试着找出类似的问题,但没有成功

提前谢谢

Student std[count];在堆栈上分配,并且需要具有预定(恒定)大小。count必须是编译时常量


学生标准=新学生[计数];会给你错误。“new”操作符在堆上分配内存,并返回指向新分配内存的指针。这允许您在编译时动态分配内存,而无需预先确定大小。你应该写Student*std=newstudent[count];这将为您提供一个指向所创建数组的第一个元素的指针。此外,一旦完成delete[]str;,您将需要释放内存;。如果不这样做,将出现内存泄漏。

第一个仅在
count
是编译时常量时才允许,第二个甚至不编译。第一个是一个数组(位于堆栈上),其中包含
count
项目数type
Student
(假设count是常量)。第二个是无效的,因为new返回一个指向分配的
Student
数组的指针,但在赋值的左侧是一个变量类型
Student
,其中应该有一个指向Student的
指针(
Student*std
)。另外请注意,我个人不会将变量命名为std,因为它也是std名称空间的一个名称。从长远来看,要得到这个特定问题的答案对您没有帮助。我建议通过一项工作并对语言的基本知识有一个扎实的理解。通常的迂腐警告可能是重复的:你可能会经历你的整个职业生涯而永远看不到一个,但是C++实现不可能使用堆栈和堆。@嵌入式系统,作为IBM大型机控制台到串行数据转换器。固件是用C++编写的,所有的内存都是用静态变量从全局范围或函数范围中提取出来的。(没有例外,没有RTTI,没有动态的铸造,没有堆,没有堆栈的变量…很多股票的C++特性是不允许的。)
Student std* = new Student[2];