C++对象的创建和销毁
C++ object creation and destruction
我弄乱了一个类以及构造函数和析构函数,但现在我不确定发生了什么,希望这里有人可以解释为什么会发生这种情况。
我有一段代码如下:
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");
这里发生的事情是:
- 将创建一个类型为
Animal
的临时对象:Animal("Loki")
。显示输出"洛基调用的构造函数"。 - 此临时的地址分配给
pDog2
。 - 临时在完整表达式的末尾被销毁:
Animal *pDog2 = &Animal("Loki");
,并显示输出"洛基的析构函数"。
在那之后,pDog2
变成了一个悬空的指针,因为它指向的临时不再存在。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 创建用户定义的复制构造函数时无法创建对象