почему нужно использовать '* p = a', а использовать 'p = & a' не работает в конструкторе - PullRequest
0 голосов
/ 13 сентября 2018

я новичок.хотелось бы понять, почему "p = & a" не работает.благодарю вас.

  class A{
      int *p;
  public:
      A(int a){p=new int; p=&a;}
      ~A(){delete p;}
  };


  int main(void){
      A B(11);
  }

1 Ответ

0 голосов
/ 13 сентября 2018

A(int a){p=new int; p=&a;} в первую очередь выделяет int для указателя p, а затем во-вторых обнуляет это значение указателя с адресом временного a.

Такв итоге вы получите свисающий указатель и a утечка памяти !Поведение вашего деструктора будет undefined .

*p = a в порядке, поскольку вы разыменовываете p.Несмотря на это, использование голых указателей в качестве членов класса вызывает проблемы с копированием экземпляров вашего объекта.Лучше всего избегать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...