我想知道 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()
叫?
我想知道 C++03 和 C++11 何时调用临时的析构函数
R 值(临时)的析构函数在表达式末尾调用。
给出你的代码:
foo method()
{
foo f;
......
......
return foo;
}
void doSomething()
{
foo f = method();
....
}
method() 创建一个对象。当该对象超出范围(在方法末尾)时,将调用析构函数(在没有优化的情况下)。
调用“foo f=”... 会导致调用 foo 的复制构造函数。之后表达式结束,导致返回的对象(临时)被破坏。当对象“f”在 doSomething 结束时超出范围时,会调用该对象的析构函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)