2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
|
||||||
1 | ||||||
Что будет с указателем после использования операции delete?28.02.2014, 21:51. Показов 5513. Ответов 21
Метки нет (Все метки)
Имеется код:
0
|
28.02.2014, 21:51 | |
Ответы с готовыми решениями:
21
Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new Что будет, если new вызвать 2 раза с одним и тем же указателем? Динамический массив структур. Почему данные доступны после выполнения операции delete [] в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант! |
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
|
|
28.02.2014, 21:55 [ТС] | 3 |
Croessmah, Где это написано?
0
|
18893 / 9850 / 2410
Регистрация: 30.01.2014
Сообщений: 17,293
|
|
28.02.2014, 23:01 | 4 |
Сообщение было отмечено mariko_11 как решение
Решение
mariko_11,
В стандарте написано следующее (5.3.5/1): Смотрим что такое cast-expression (5.4/1): Теперь осталось самое простое, посмотреть на prvalue (3.10/1): Следовательно оригинал, ставший аргументом delete, никак не изменяется.
1
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
||||||||||||||||
28.02.2014, 23:12 | 5 | |||||||||||||||
да
DrOffset, привел ссылки на стандарт я попытаюсь по проще объяснить
в ассемблере это будет выглядеть так
так же как
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
01.03.2014, 11:42 | 6 |
Есть дом по адресу ул.Ленина, д.42. Его снесли. Дома нет, а адрес остался.
Понятно, что через некоторое время и адреса не останется, но это же происходит в программе, когда указатель выходит из области видимости.
2
|
ValeryS
|
01.03.2014, 11:44
#7
|
Не по теме: Tulosba,
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
01.03.2014, 20:58 | 8 |
Тут вопрос о другом.
Не о том, что происходит со значением указателя, когда указатель выходит из области видимости, а о том, что происходит со значением указателя после delete. Например, в других библиотеках есть указатели (guarded pointer), которые автоматически принимают значение null, когда объект, на который они указывают, удаляется (например в Qt: класс QPointer).
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
01.03.2014, 22:07 | 9 |
так это и есть аналогия про снесенный дом (delete), а выход из области видимости уже потом.
В другие библиотеки ходить даже не обязательно. Возьмите std::unique_ptr хотя бы.
0
|
Неэпический
|
|
01.03.2014, 22:36 | 11 |
конечно, потому что в какой-то книге учета сделают пометку что дома больше нет и место свободно. Причем сделают это явно без людей, которые этот дом сносили
0
|
alsav22
|
01.03.2014, 23:02
#12
|
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
01.03.2014, 23:15 | 13 |
alsav22, Вы зачем-то смешали всё в кучу. Никаких разговоров до Вашего сообщения #8 об умных указателях не было. Всё что хотел знать ТС, это что будет с сырым указателем после применения к нему оператора delete. И ответ был дан незамедлительно (#2), а потом в сообщении #4 он был развернут.
0
|
Croessmah
|
01.03.2014, 23:16
#14
|
Не по теме: alsav22, от того что снесли дом, план города не поменялся. Он поменяется только когда кто-то соизволит им заняться(этакая обертка)
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
01.03.2014, 23:21 | 15 |
Не по теме: Это о чём? Причём здесь план города? Разговор об адресе дома: остаётся адес старым, когда дом сносят или меняется. Добавлено через 2 минуты Рзаговор о том, что если рассматривать обычный указатель, то аналогия с домом подходит, но есть (в других библиотеках, std::unique_ptr) указатели, к которым эта аналогия не подходит, вот и всё.
0
|
Неэпический
|
|
01.03.2014, 23:25 | 16 |
это не указатели, это обертки над ними!!!
И аналогия с домом как раз таки для них тоже подходит: Строители сносят здание (delete). Организация, которая это контролирует, помечает дом везде как снесенный и что тут ничего нет уже(обертка над указателем).
1
|
alsav22
|
01.03.2014, 23:32
#17
|
0
|
Croessmah
|
01.03.2014, 23:35
#18
|
0
|
18893 / 9850 / 2410
Регистрация: 30.01.2014
Сообщений: 17,293
|
||||||
01.03.2014, 23:38 | 19 | |||||
Если оставаться в рамках темы, то значение указателя в такой обертке меняется ведь не потому что delete начинает себя вести по-другому, а потому что, грубо говоря, там написали код:
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
01.03.2014, 23:41 | 20 |
Не по теме: Возможно я не совсем правильно понял смысл 6-го поста Tulosba. Добавлено через 1 минуту Согласен. Добавлено через 36 секунд Согласен.
0
|
01.03.2014, 23:41 | |
01.03.2014, 23:41 | |
Помогаю со студенческими работами здесь
20
После использования операции присваивания ошибку выдает само удаление файла Какое будет значение Р после выполнения операции логического присваивания? Операции с указателем к char[] Что будет, если клиент арендовал адрес dchp, и во время использования пул изменился? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |