Адрес, на который указывает pointer1
, был выделен new
.Следовательно, правильно, даже необходимо, вызывать delete
по этому адресу.
Однако, &pointer1
дает вам адрес, где хранится сам pointer1
.И этот блок памяти не был выделен new
.Следовательно, категорически запрещается вызывать delete
, что именно и говорит вам об ошибке.
Итак, да, delete pointer1
освобождает память, выделенную new
ранее.Но нет, delete &pointer1
не делает ничего, кроме того, что является незаконным.
Кроме того, доступ к памяти, которую вы называли delete
ранее, является неопределенным поведением.Итак, ваш второй *pointer1
- это тоже ничего, что вы хотите написать в программе, которую вы не хотите аварийно завершить, или, что еще хуже, которая дает вам непредсказуемые результаты.