В этом руководстве будет представлен пример кода для использования общих функций управления памятью C++, о которых я писал в Управление памятью в C и C++, часть 1. Если вам интересно узнать об управлении памятью в C++, включая легко усваиваемую аналогию с автомобилем, и узнать больше о теории кода, убедитесь, что вы прочитали часть 1 этого руководства, в противном случае, если вы хотите погрузиться прямо в пример кода, продолжайте читать!

Пример:

  • Внутри функции main(): в первой строке мы инициализируем переменную ‘char pointer’. (Если вам интересно, что такое указатель, возможно, вам будет интересно прочитать мой блог Указатели и ссылки в C++).
  • Строка 2: определяет размер блока в байтах, выделяемый в памяти для этого указателя char. Мы выполняем приведение к «указателю char», как в C++, функция «malloc» вернет указатель типа void вместо указателя char, если не было приведено специально.
  • Вышеуказанное не является обязательным, но это предпочтительный способ.
  • Примечание. В 'C' нет необходимости приводить 'malloc'.
  • Строка 3: затем мы копируем текст «becomeatechie» в выделенное адресное пространство памяти — по сути, мы сохраняем значение в заданном адресном пространстве.
  • Строка 4: в этой строке я привожу пример использования функции 'realloc' — она принимает указатель char и расширяет выделенную память для этого адреса. пробел от 14 байт до 25.
  • Вам нужно будет использовать эту функцию в ситуации, когда вы изначально выделили меньший объем памяти для данного адресного пространства (что является хорошей практикой, вам всегда нужно помнить о памяти, выделять только столько, сколько требуется), но во всем вашем коде ваш указатель нужно будет использовать для хранения большего значения.
  • Строка 5: функция strcat используется для добавления строки к существующей строке. В этом случае мы добавляем «.com» к строке в памяти в заданном адресном пространстве. Теперь то, что у нас есть в качестве значения в адресном пространстве, — это значение «becomeatechie.com».
  • Строка 6: название функции здесь говорит само за себя: мы освобождаем память в адресном пространстве для указателя char siteName.
  • Строка 7: здесь не так много значения, это просто говорит функции «выйти».

Дополнительный факт: знаете ли вы, что указатели можно удалять? Да, вы, конечно, можете, вам на самом деле не нужно, чтобы программа заканчивала работу, чтобы ваши указатели были удалены. Однако будьте осторожны, так как если вы случайно вызовете функцию delete для одного и того же указателя более одного раза, вы готовите рецепт катастрофы! В официальной документации о «катастрофе с двойным удалением есть интересный раздел».