| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > delete p и delete [] p в чём отличие??? |
| Автор: ano360 20.7.2006, 19:59 |
| Встречал такие формы написания делите :delete p, где p-указатель и delete [] p, оба работают, не вызывая ошибок, так в чём же отличие? |
| Автор: Damarus 20.7.2006, 20:45 | ||
delete[] - для массивов.
Толко для простых типов, для классов могут быть проблеммы с вызовом деструктора. |
| Автор: GremlinProg 20.7.2006, 20:51 |
| в том, что первый оператор удаляет только один объект по адресу p, а второй - удаляет массив объектов, созданных оператором new[], т.е., конкретно, разница заключается в том, будут ли последовательно вызваны деструкторы у удаляемых объектов или нет. В delete[] p - будут, а в delete p будет вызван только один деструктор, так что если это массив, то остальные объекты останутся без деинициализации. |
| Автор: slava72 21.7.2006, 11:39 |
| new T - вызывает operator new() new T[] - вызывает operator new[]() опрераторы delete и delete[] парные к new - соответственно должен вызывать нужный в зависимости от того, чем паспределял память. Их сам можешь переопределить для какого нибудь класса (при очень большом желании и понимании что делаешь void* operator new(size_t) - классический void* operator new(size_t, void*) - оператор размещения (используется в частности std::контейнерами) void* operator new(size_t, std::nothrow) - не генерит исключений (возвращает 0 при нехватке памяти) и парные им delete |
| Автор: ano360 24.7.2006, 00:24 |
| спасибо |
| Автор: sergejzr 24.7.2006, 01:01 | ||
Вот, поиграйтесь
|