C++对象的创建和销毁

C++ object creation and destruction

本文关键字:创建 对象 C++      更新时间:2023-10-16

我弄乱了一个类以及构造函数和析构函数,但现在我不确定发生了什么,希望这里有人可以解释为什么会发生这种情况。

我有一段代码如下:

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

该类只有一个构造函数,该构造函数打印构造函数和/或析构函数正在使用动物的名称调用。然而,我在输出中看到的是 pDog2 正在创建,但紧接着它就被销毁了。我不知道为什么,因为它还没有超出范围,对吧?

给出的输出是:

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

希望有人能帮我解释一下。

Animal *pDog2 = &Animal("Loki");

这里发生的事情是:

  1. 将创建一个类型为Animal的临时对象:Animal("Loki")。显示输出"洛基调用的构造函数"。
  2. 此临时的地址分配给pDog2
  3. 临时在完整表达式的末尾被销毁:Animal *pDog2 = &Animal("Loki");,并显示输出"洛基的析构函数"。

在那之后,pDog2变成了一个悬空的指针,因为它指向的临时不再存在。