C ++ создание и уничтожение объектов - PullRequest
0 голосов
/ 07 октября 2018

Я возился с классом, конструктором и деструктором, но теперь я не уверен, что происходит, и, надеюсь, кто-то здесь может объяснить, почему это происходит.

У меня есть фрагмент кодаследует:

Animal dog1 = Animal("Thor");
Animal *pDog2 = &Animal("Loki");
Animal *pDog3 = new Animal("New");

У класса просто есть конструктор, который печатает, что конструктор и / или деструктор вызывается с именем Animal.Однако в выводе я вижу, что pDog2 создается, но сразу после этого он уничтожается.Я понятия не имею, почему, поскольку это еще не выходит за рамки, верно?

Вывод:

Constructor of Thor called. 
Constructor of Loki called. 
Destructor of Loki called. 
Constructor of New called.

Надеюсь, кто-то может помочь мне объяснить это,

1 Ответ

0 голосов
/ 07 октября 2018
Animal *pDog2 = &Animal("Loki");

Что происходит здесь:

  1. Временный объект типа Animal создан: Animal("Loki").Вывод «Конструктор Локи вызван.» показан.
  2. Адрес этого временного объекта назначен на pDog2.
  3. Временный уничтожается в концеполное выражение: Animal *pDog2 = &Animal("Loki"); и вывод «Разрушитель Локи вызван». показано.

После этого pDog2 становится висящим указателем как временным, на который оно указывалобольше не существует.

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