в коде вы не используете ссылку на указатель, чтобы сделать так:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int* ptrA = new int(77);
int*& rPtrA = ptrA; // this a reference to a pointer
cout << "ptrA: " << ptrA << endl;
cout << "*ptrA: " << *ptrA << endl;
cout << "rPtrA: " << rPtrA << endl;
cout << "*rPtrA: " << *rPtrA << endl;
delete ptrA;
ptrA = NULL;
cout << "ptrA: " << ptrA << endl;
// cout << "*ptrA: " << *ptrA << endl; // cause runtme error
cout << "rPtrA: " << rPtrA << endl;
// cout << "*rPtrA: " << *rPtrA << endl;// cause runtme error
ptrA = new int(100);
cout << "ptrA: " << ptrA << endl;
cout << "*ptrA: " << *ptrA << endl;
cout << "rPtrA: " << rPtrA << endl;
cout << "*rPtrA: " << *rPtrA << endl;
delete rPtrA; // delete pointer through its reference
rPtrA = NULL;
cout << "ptrA: " << ptrA << endl;
// cout << "*ptrA: " << *ptrA << endl; // runtime error
cout << "rPtrA: " << rPtrA << endl;
// cout << "*rPtrA: " << *rPtrA << endl; // runtime error
return 0;
}
& * используется для ссылки на указатель не только &. Ссылка - это просто еще один псевдоним переменной, поэтому независимо от того, какая переменная меняет и эталонные изменения.
Ссылка на указатель ОТМЕНА К АДРЕСУ УКАЗАТЕЛЯ не адрес, который хранится указатель (значение указателя).
в своем коде вы использовали ссылку на значение (то, что указатель хранит не сам указатель) указывает указатель на
Вы не можете. 4321 – melpomene
'* a = new A()' после 'delete a' является незаконным. –
вы можете, если вы объявите 'b' как' struct {A & _; } b = {* a}; '(доступ требует' b._'). Повторное определение работает как 'new (& b) decltype (b) {* a}'. Если вам нравится этот комментарий, пожалуйста, поддержите его. –