我希望了解在C++03和C++11中,临时对象的析构函数何时被调用。
假设我有以下情况:
foo method()
{
foo f;
......
......
return foo;
}
void doSomething()
{
foo f = method();
....
}
假设我正在使用标志
-fno-elide-constructors
,因为我想理解临时对象的析构函数何时被调用的理论知识。因此,在上述C++03
代码中,当method()
完成后,使用其复制构造函数创建了foo
的副本。之后,在语句foo f = method()
中再次调用了foo
的复制构造函数。在这种情况下,对于C++03,这个由method
传递的临时对象的析构函数是在何时调用的呢?它是在doSomething()
作用域结束时调用吗?
现在我想将相同的情况应用于涉及移动语义的C++11。在C++11的情况下,当method
返回时,会创建foo
的副本。然后,在调用foo f = method()
时,将调用foo
的移动构造函数。那么,在C++11的情况下,从method()
返回的临时对象的析构函数是在何时调用的?
foo(const foo&)
,而在C++11中有时会调用foo(foo&&)
。 - Mooing Duck