Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Динамическая память С++

Хорошее понимание того, как на самом деле работает динамическая память в C++, необходимо для того, чтобы стать хорошим программистом на C++. Память в вашей программе на C++ разделена на две части —

Во многих случаях вы не знаете заранее, сколько памяти вам потребуется для хранения конкретной информации в определенной переменной, и размер требуемой памяти можно определить во время выполнения.

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

Если вам больше не нужна динамически выделяемая память, вы можете использовать удалить оператор, который отменяет выделение памяти, ранее выделенной оператором new.

создать и удалить операторы

Существует следующий общий синтаксис для использования new оператор для динамического выделения памяти для любого типа данных.

06

Здесь тип данных может быть любым встроенным типом данных, включая массив, или любыми определяемыми пользователем типами данных, включая класс или структуру. Начнем со встроенных типов данных. Например, мы можем определить указатель на тип double, а затем запросить выделение памяти во время выполнения. Мы можем сделать это с помощью нового оператор со следующими утверждениями —

15 

Память могла быть не выделена успешно, если свободное хранилище было израсходовано. Поэтому рекомендуется проверить, возвращает ли новый оператор указатель NULL, и предпринять соответствующие действия, как показано ниже —

23

malloc() функция из C, все еще существует в C++, но рекомендуется избегать использования функции malloc(). Основное преимущество new перед malloc() заключается в том, что new не просто выделяет память, а создает объекты, что является основной целью C++.

В любой момент, когда вы чувствуете, что динамически выделенная переменная больше не требуется, вы можете освободить память, которую она занимает в свободном хранилище, с помощью оператора «удалить» следующим образом —

37

Давайте поместим вышеприведенные концепции и сформируем следующий пример, чтобы показать, как работают «новый» и «удалить» —

Живая демонстрация
45

Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

54

Динамическое выделение памяти для массивов

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

66

Чтобы удалить массив, который мы только что создали, оператор будет выглядеть следующим образом —

78

Следуя аналогичному общему синтаксису оператора new, вы можете выделить многомерный массив следующим образом —

85

Однако синтаксис для освобождения памяти для многомерного массива останется таким же, как указано выше —

95

Динамическое выделение памяти для объектов

Объекты ничем не отличаются от простых типов данных. Например, рассмотрим следующий код, в котором мы собираемся использовать массив объектов для пояснения концепции —

Живая демонстрация
102

Если бы вы выделили массив из четырех объектов Box, конструктор Simple вызывался бы четыре раза, и аналогичным образом при удалении этих объектов деструктор также вызывался бы такое же количество раз.

Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

110

Язык C

  1. Типы данных С++
  2. Операторы С++
  3. С++ Комментарии
  4. C - Управление памятью
  5. Обзор С++
  6. Константы/литералы С++
  7. Операторы в С++
  8. Числа в С++
  9. Ссылки на С++
  10. Динамическая память С++