可能是重复问题:
为什么析构函数只被调用了一次?
给定下面的代码,我无法理解在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
离开main之前
析构函数