Я просто хочу знать, в чем разница между вроде:
Student std[2];
а также
Student std* = new Student[2];
Я знаю, что 1-й похож на массив, и вы объявляете новую память для каждого индекса, но тогда чем он отличается, если вы делаете это по-другому, и насколько он отличается при доступе к членам в классе?
Я пытался найти похожие вопросы, но безуспешно.
Заранее спасибо.
Первый - это массив (который находится в стеке), содержащий количество элементов count типа Student (при условии, что количество является константой). Второй недействителен, так как new возвращает указатель на выделенный массив Student, но с левой стороны назначения находится переменная типа Student, вместо которой должен быть pointer to Student (Student *std). Также обратите внимание, что я лично не стал бы называть свои переменные std, поскольку это также имя пространства имен std.
В конечном итоге вам не будет полезно получить ответ на этот конкретный вопрос. Я рекомендую проработать хороший учебник и получить твердое понимание основ языка.
Возможный дубликат В чем разница между созданием объекта с использованием нового и без





Студенческий стандарт [количество]; выделяется в стеке и должен иметь заранее определенный (постоянный) размер. считать должен быть постоянной времени компиляции.
Студент std = новый студент [количество]; выдаст вам ошибки. Оператор «новый» выделяет память в куче и возвращает указатель на вновь выделенную память. Это позволяет вам динамически выделять память без заранее определенного размера во время компиляции. Вы должны написать Студент * std = новый Студент [количество]; Это даст вам указатель на первый элемент массива, который был создан. Кроме того, вам нужно будет освободить память после того, как вы закончите с удалить [] str;. Если вы этого не сделаете, у вас будет утечка памяти.
Обычное педантичное предупреждение: вы можете пройти всю свою карьеру и никогда не увидеть ни одной, но реализация C++ может не использовать стеки и кучи.
@ user4581301 • Я видел одну! Встроенная система как преобразователь консольных данных мэйнфреймов IBM в последовательные. Прошивка была написана на C++, и вся память была вырезана из доступной памяти с использованием статических переменных либо глобальной области видимости, либо области действия функции. (Без исключений, без RTTI, без dynamic_cast, без кучи, без стека для переменных ... многие стандартные функции C++ были запрещены.)
Первый разрешен только в том случае, если
countявляется константой времени компиляции, второй даже не компилируется