gpt4 book ai didi

C++对象的创建和销毁

转载 作者:行者123 更新时间:2023-11-30 02:18:05 33 4
gpt4 key购买 nike

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

我有一段代码如下:

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.

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

最佳答案

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

这里发生的是:

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

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

关于C++对象的创建和销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688677/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com