Чтобы ответить на ваш вопрос напрямую, он задавался ранее.delete удалит то, на что указывает ваш указатель, но Бьярн Страуструп предположил, что на значение самого указателя больше нельзя полагаться, особенно если это l-значение.Однако это не влияет на возможность переназначения, так что это будет правильно:
for( p = first; p != last; ++p )
{
delete p;
}
, если вы выполняете итерацию по массиву указателей, все из которых были выделены с помощью new
.
Управление памятью в C ++ лучше всего выполнять с помощью метода RAII, «получение ресурсов является инициализацией».
На самом деле это означает, что во время выделения ресурса вы сразу же заботитесь о его времени жизни, т.е.вы «управляете» им, помещая его в какой-то объект, который удалит его для вас, когда он больше не нужен.
shared_ptr - это метод, обычно используемый, когда ресурс будет использоваться во многих местах, а вы не знаете, для чего он нужен.определенный, который последним «освободит» его, т. е. больше не требует его.
shared_ptr часто используется в других местах просто из-за его семантики, то есть вы можете скопировать и назначить их достаточно легко.
Существуют и другие умные указатели управления памятью, в частности std :: auto_ptr, которые будут заменены уникальными_ptr, и есть также scoped_ptr.Слабый_птр - это методология, позволяющая получить shared_ptr, если он где-то существует, но не содержит ссылки самостоятельно.Вы вызываете «lock ()», который дает вам shared_ptr для памяти или NULL, если все текущие общие указатели исчезли.
Для массивов вы обычно не используете умный указатель, а просто используете vector.
Для строк вы обычно используете класс string, а не думаете о нем как о символе char.