21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
|
|||||||||||
1 | |||||||||||
оператор delete у null09.12.2013, 21:32. Показов 4900. Ответов 13
Метки нет (Все метки)
Один человек говорил что опасно использовать такой код (delete к null указателю), ну или когда-то было опасно, и что желательно перед delete проверять указатель. Так ли это? Поясните пожалуйста. (просто если и так, не понятно почему нельзя было встроить проверку в реализацию самого оператора delete)
Похоже эта запись норм, а как быть с такой
1
|
09.12.2013, 21:32 | |
Ответы с готовыми решениями:
13
Оператор delete Оператор delete[]. Как исправить ошибку: Error HEAP CORRUPTED. Откуда утечка памяти? Почему delete не устанавливает автоматически указатель в NULL? Оператор delete |
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
|||||||||||
09.12.2013, 21:39 | 2 | ||||||||||
ошибка будет однако ты удалил память а указатель то на неё все равно указывает, он автоматически не обнуляется даже такая конструкция даст ошибку
АГА Добавлено через 1 минуту не могу сказать точно но по моему проверять нужно free считай что уже встроен
1
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
09.12.2013, 21:40 | 3 |
Зачем слушать "одного человека", когда можно узнать наверняка? Стандарт говорит нам, что если передать в delete нулевой указатель, то деструктор не вызывается. Сам адрес может передаваться или не передаваться в функцию освобождения памяти, но даже если передаётся, стандартный аллокатор гарантированно ничего с ним не делает.
0
|
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
|
|
09.12.2013, 21:51 [ТС] | 4 |
Да с этим теперь понял. Угнетает это
почему нету обнуления внутри оператора delete, как это может мешать?
0
|
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
|
|
09.12.2013, 22:08 [ТС] | 6 |
ValeryS, не понял...
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
|||||||||||
09.12.2013, 22:19 | 7 | ||||||||||
я спросил как delete может обнулить(читай записать значение) a или b
это значит нужно писать другую delete которая работает со ссылками или указателями а куда кучу кода девать? и все равно указатель обнулять придется иначе в нем мусор может быть в таком например коде
нужно писать
0
|
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
|
|
09.12.2013, 22:37 [ТС] | 8 |
Это уже понял, я и пишу, почему оператор delete после своей работы не обнуляет указатель сам, разве это не логично? Ну и следовательно логично предположить что это для чего-то нужно, вот мне и интересно для чего.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
||||||
09.12.2013, 22:45 | 9 | |||||
потому что не может он этого сделать он работает с копией адреса
ты же не спрашиваешь почему объявление переменных не обнуляет их автоматически, это ведь тоже логично (хотя глобальные обнуляет) прими как данное или дизасемблируй программу и посмотри как все это работает Добавлено через 1 минуту вот как он будет выглядеть в ассемблере (примерный код для 80х86)
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
||||||||||||||||
16.12.2013, 15:45 | 12 | |||||||||||||||
NULL это NULL, а ни какой не 0
хотя может им и быть вот три компилятора Qt
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
16.12.2013, 15:55 | 13 | |||||
из приведенных кодов следует как раз обратное
Но на самом деле NULL implementation defined. Поэтому, в любом случае код
Добавлено через 4 минуты Понимать надо одно: плюсы создавались и стараются придерживаться стратегии "не добавлять лишнего". В частности поэтому деструктор не сделан виртуальным по умолчанию, delete не обнуляет указатель и прочее.
0
|
16.12.2013, 16:19 | 14 |
Я бы отнёс это к категории "понимание придёт со временем"
Добавлено через 1 минуту Не как ответ на вопрос, а как вопрос на вопрос, чтобы было видно, что твоё предположение не логично. Что, на твой взгляд, должен обнулить оператор delete в следующем коде: C++ class A * func (); ... delete func();
0
|
16.12.2013, 16:19 | |
16.12.2013, 16:19 | |
Помогаю со студенческими работами здесь
14
Оператор delete Оператор delete[] оператор delete[] оператор delete Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |