是否存在在C++(11)中解除分配局部变量的已定义顺序?更简洁:在同一范围内两个局部变量的析构函数的副作用会以何种顺序变为可见?
例如:
struct X{
~X(){/*do something*/}
}
int main(){
X x1;
X x2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是x1或x2毁坏第一主时返回或在C++ 11未定义的顺序?
我想知道何时为C++ 03和C++ 11调用temporay的析构函数
假设我有以下情况
foo method()
{
foo f;
......
......
return foo;
}
void doSomething()
{
foo f = method();
....
}
Run Code Online (Sandbox Code Playgroud)
假设我正在使用该标志,-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()被调用返回的临时对象的析构函数?