A(int a){p=new int; p=&a;}
в первую очередь выделяет int
для указателя p
, а затем во-вторых обнуляет это значение указателя с адресом временного a
.
Такв итоге вы получите свисающий указатель и a утечка памяти !Поведение вашего деструктора будет undefined .
*p = a
в порядке, поскольку вы разыменовываете p
.Несмотря на это, использование голых указателей в качестве членов класса вызывает проблемы с копированием экземпляров вашего объекта.Лучше всего избегать.