Форум программистов, компьютерный форум CyberForum.ru

delete vs. delete [] - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
30.09.2010, 10:43     delete vs. delete [] #1
Всем привет,

в разница использования delete и delete [] ?

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

C++
1
2
3
4
5
6
        char *str = new char [25];
        strcpy( str, "this is some test" );
 
        char *strcp = str;
 
        delete str;
В данном случае, в дебаггере можно посмотреть, что хоть и используется delete, то память освобождается всей строки... Почему данный пример работает также, как и
C++
1
2
3
4
5
6
        char *str = new char [25];
        strcpy( str, "this is some test" );
 
        char *strcp = str;
 
        delete [] str;
и когда нужно писать delete [] а когда просто delete?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2010, 10:43     delete vs. delete []
Посмотрите здесь:

C++ new delete
C++ delete this
C++ В чем разница между delete и delete[]?
"delete [] a, b;" эквивалентно "delete [] a; delete [] b;"? C++
Чем отличается delete[] от delete? C++
new - delete C++
C++ new и delete
C++ delete this
C++ delete[]
C++ new[] - delete[]
New/Delete C++
New delete C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
30.09.2010, 12:16     delete vs. delete [] #2
delete для немассивов, delete[] для массивов - вся разница. Если вызовешь не тот, поведение не определено.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
30.09.2010, 12:20     delete vs. delete [] #3
delete[] нужно писать тогда (и только тогда!), когда освобождается память, выделенная под массив объектов оператором new[]. delete - тогда (и только тогда!), когда освобождается память, выделенная под единичный объект оператором new.

Во всех остальных случаях Стандарт языка гарантирует неопределенное поведение программы. А уж каким именно будет это самое "неопределенное поведение" - то ли ничего не происходит, и все "работает также, как и...", то ли произойдет format C: или еще что-то неприятное - этого Стандарт не конкретизирует.... Тут, как говорится, как карта ляжет...
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
30.09.2010, 12:33  [ТС]     delete vs. delete [] #4
спасибо за ответы, меня смущало то, что delete в данном примере правильно работает для памяти, выделенной new []. Т.е. вся память очищается (в visual studio 6)

хм, интересно, а есть компиляторы, где данный пример приведет к мемори лику?.. :-)
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
30.09.2010, 18:29     delete vs. delete [] #5
PMike:
Совет:
Обновить студию разработки на более новую версию, в VC++ 6.0 есть вещи,
о которых в стандарте языка C++ ни чего не написано.
Yandex
Объявления
30.09.2010, 18:29     delete vs. delete []
Ответ Создать тему
Опции темы

Текущее время: 20:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru