这是合乎逻辑的,在堆栈上创建对象...对象的副本返回,原始被删除
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!
为什么在第二个运算符重载方法中没有调用析构函数?
答案 0 :(得分:6)
您所看到的是编译器没有通过执行return-value-optimization来创建临时对象。
答案 1 :(得分:5)
不会调用析构函数,因为编译器可以在此处执行“返回值优化”。有关详细信息,请参阅http://en.wikipedia.org/wiki/Return_value_optimization。