1

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

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!

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

4

2 回答 2

6

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

于 2013-04-09T19:02:27.777 回答
5

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

于 2013-04-09T19:02:39.990 回答