可能重复:
为什么只调用了一次析构函数?
鉴于下面的代码,我无法理解 gcc 中的输出。我希望创建和销毁两个对象,但只看到一个对构造函数和析构函数的调用。这里发生了什么事?
#include <string>
#include <iostream>
struct Huge{
Huge() { std::cout << "Constructor" << std::endl; }
Huge(Huge const &r) { std::cout << "Copy Constructor" << std::endl; }
~Huge() { std::cout << "Destructor" << std::endl; }
};
Huge g() {
std::cout << "Entering g" << std::endl;
Huge temp;
std::cout << "Exiting g" << std::endl;
return temp;
}
int main(){
Huge h2(g());
std::cout << "Before leaving main" << std::endl;
}
此代码在 g++ (4.4) 中的输出是
输入 g
构造函数
退出 g
离开主线前
析构函数