Во-первых, я попросил бы не касаться моих родственников.
Во-вторых - перестать истерить.
В-третьих - замечание интересное, но в рамках уже сказанного выше - не актуальное.
Я прям так и вижу, как пользователь брызжа слюной набирал этот гневный пост (даже поленился фрагмент цитирования выделить, хотя отвечает лишь на часть поста).
Вот если б вместо эмоций повнимательнее присмотреться к:
Меня всё устраивает, я ко всему привык, я это знаю. НО. Не кажется ли вам это слегка нелогичным?
|
то можно сделать вывод, что вопрос то стоит несколько в иной плоскости. И именно такие "метафизические" вопросы я частенько и задаю, предварив их соответствующей пометкой. И именно к этому мы и пришли "удаление не есть модификация" (хоть несколько странно с обывательской точки зрения, но объекты как-то надо уничтожать [хотя на практике, компилятор на вряд ли будет очищать память из-под константных строк, т.к. изначально вовлекает их в оптимизации]).
const char *x;
const char *y;
x="123";
cout<<(void*)x<<endl;
delete[]x;
x="234";
cout<<(void*)x<<endl;
y=new char[3];
cout<<(void*)y<<endl;
delete[]y;
y=new char[3];
cout<<(void*)y<<endl;
На самом деле содержимое
x ("123") не удалится, память для "234" будет взята новая. При этом
y удаляется "по-настоящему": память для второго массива имеет тот же адрес, т.к. она уже доступна для использования.
И ещё:
Сообщение от pozitiffcat
массив грохнуть можно (указатель точнее), данные менять нет,
|
смею указать на ошибку: указатель останется "живым". Он, в отличии от адресуемого куска памяти, в приведённых примерах создаётся не в куче (представляет собой т.н. в некоторых книгах "автоматическую" переменную), удалён при вызове delete не будет, и повторно может использоваться для хранения иных адресов. "Грохнута", как Вы выражаетесь, будет память, адресуемая данным указателем. Но впрочем, к чему эти формальности, ведь "в интернете кто-то не прав".