В чем разница между экземпляром Classsname [count]; и Classname instance = new instance [count] в C++?

Я просто хочу знать, в чем разница между вроде:

Student std[2];

а также

Student std* = new Student[2];

Я знаю, что 1-й похож на массив, и вы объявляете новую память для каждого индекса, но тогда чем он отличается, если вы делаете это по-другому, и насколько он отличается при доступе к членам в классе?

Я пытался найти похожие вопросы, но безуспешно.

Заранее спасибо.

Первый разрешен только в том случае, если count является константой времени компиляции, второй даже не компилируется

UnholySheep 24.05.2018 18:19

Первый - это массив (который находится в стеке), содержащий количество элементов count типа Student (при условии, что количество является константой). Второй недействителен, так как new возвращает указатель на выделенный массив Student, но с левой стороны назначения находится переменная типа Student, вместо которой должен быть pointer to Student (Student *std). Также обратите внимание, что я лично не стал бы называть свои переменные std, поскольку это также имя пространства имен std.

StereoBucket 24.05.2018 18:22

В конечном итоге вам не будет полезно получить ответ на этот конкретный вопрос. Я рекомендую проработать хороший учебник и получить твердое понимание основ языка.

R Sahu 24.05.2018 18:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Студенческий стандарт [количество]; выделяется в стеке и должен иметь заранее определенный (постоянный) размер. считать должен быть постоянной времени компиляции.

Студент std = новый студент [количество]; выдаст вам ошибки. Оператор «новый» выделяет память в куче и возвращает указатель на вновь выделенную память. Это позволяет вам динамически выделять память без заранее определенного размера во время компиляции. Вы должны написать Студент * std = новый Студент [количество]; Это даст вам указатель на первый элемент массива, который был создан. Кроме того, вам нужно будет освободить память после того, как вы закончите с удалить [] str;. Если вы этого не сделаете, у вас будет утечка памяти.

Обычное педантичное предупреждение: вы можете пройти всю свою карьеру и никогда не увидеть ни одной, но реализация C++ может не использовать стеки и кучи.

user4581301 24.05.2018 19:08

@ user4581301 • Я видел одну! Встроенная система как преобразователь консольных данных мэйнфреймов IBM в последовательные. Прошивка была написана на C++, и вся память была вырезана из доступной памяти с использованием статических переменных либо глобальной области видимости, либо области действия функции. (Без исключений, без RTTI, без dynamic_cast, без кучи, без стека для переменных ... многие стандартные функции C++ были запрещены.)

Eljay 24.05.2018 19:27

Другие вопросы по теме