C ++对象的创建和销毁

时间:2018-10-07 12:53:07

标签: c++ c++11 visual-c++

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

我有一段代码如下:

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

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

给出的输出是:

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

希望有人可以帮助我解释一下。

1 个答案:

答案 0 :(得分:3)

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

这里发生的是:

  1. 创建了Animal类型的临时对象:Animal("Loki")。输出“ Loki的构造函数已调用。”
  2. 该临时地址已分配给pDog2
  3. 在完整表达式Animal *pDog2 = &Animal("Loki");的末尾销毁该临时文件,并显示输出“调用了Loki的析构函数。”

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