为什么没有调用析构函数?

时间:2013-04-09 18:59:11

标签: c++ stack

这是合乎逻辑的,在堆栈上创建对象...对象的副本返回,原始被删除

Box operator +(const Box& box) const 
{
    Box b = Box(this->num + box.num);
    return b;                        
}  // destructor called!

为什么在这种情况下进程不同?

Box operator +(const Box& box) const 
{
    return Box(this->num + box.num);
}   // destructor not called!

为什么在第二个运算符重载方法中没有调用析构函数?

2 个答案:

答案 0 :(得分:6)

您所看到的是编译器没有通过执行return-value-optimization来创建临时对象。

答案 1 :(得分:5)

不会调用析构函数,因为编译器可以在此处执行“返回值优化”。有关详细信息,请参阅http://en.wikipedia.org/wiki/Return_value_optimization