С++ удаление указателя на указатель

Я согласен с Джейсоном Коэном, хотя pointer мы можем немного прояснить c++ причину необходимости удаления cpp ваших указателей с помощью cpp цикла. Для каждого «нового» или c++ динамического выделения памяти c++ необходимо «удалить» освобождение cpp памяти. Иногда «удаление» может c++ быть скрыто, как в случае pointer с умными указателями, но ptr оно все еще там.

int main()
{
  int *pI = new int;
  int *pArr = new int[10];

пока что cpp в коде мы выделили два куска pointer динамической памяти. Первый cpp - это просто общий тип int, второй cpp - массив целых чисел.

  delete pI;
  delete [] pArr;

эти pointer операторы удаления очищают cxx память, которая была выделена pointers "новыми"

  int ppArr = new int *[10];

  for( int indx = 0; indx < 10; ++indx )
  {
    ppArr[indx] = new int;
  }

Этот фрагмент кода ptr выполняет оба предыдущих pointers распределения. Сначала мы pointers создаем место для нашего ptr int в динамическом массиве. Затем cxx нам нужно выполнить цикл c++ и выделить целое число для cxx каждого места в массиве.

  for( int indx = 0; indx < 10; ++indx )
  {
    delete ppArr[indx];
  }
  delete [] ppArr;

Обратите cpp внимание на порядок, в котором ptr я выделил эту память, а затем ptr освободил ее в обратном порядке. Это cpp потому, что если бы мы сделали pointer удаление [] ppArr; сначала ptr мы потеряли бы массив, который ptr сообщает нам, какие у нас cxx другие указатели. Этот фрагмент c++ или память будут возвращены cxx системе, и поэтому их больше pointers нельзя будет надежно прочитать.

  int a=0;
  int b=1;
  int c=2;

  ppArr = new int *[3];

  ppArr[0] = &a;
  ppArr[1] = &b;
  ppArr[2] = &c;

Думаю, это cpp тоже следует упомянуть. Тот cpp факт, что вы работаете с cpp указателями, не означает, что ptr память, на которую указывают cxx эти указатели, была динамически cxx выделена. То есть то, что pointers у вас есть указатель, не pointers означает, что его обязательно pointers нужно удалить. Созданный cxx здесь массив динамически cxx распределяется, но указатели c++ указывают на локальные экземпляры c++ целых чисел. Когда мы удаляем cpp это, нам нужно удалить только ptr массив.

  delete [] ppArr;

  return 0;

}

В конце концов, динамически cpp выделяемая память может быть c++ сложной, и в любом случае cxx вы можете безопасно обернуть ptr ее, например, в умный указатель ptr или с помощью контейнеров c++ stl, а не свои собственные, которые cxx могут сделать вашу жизнь cxx намного приятнее.

c++

pointers

2022-06-07T06:36:11+00:00