2015-07-12 56 views
1

标题说的很多。考虑下面这个例子:在没有复制elision的情况下,是否保证在析构函数之前调用复制/移动构造函数?

MyClass func() 
{ 
    MyClass myInstance; 
    return myInstance; 
} 

int main() 
{ 
    auto myInstance = func(); 
} 

在没有复制省略的,是复制或移动的MyClass保证构造函数的析构函数调用func()回报myInstance之前叫什么名字?我想像一个像std::shared_ptr这样的类在使用价值返回时会使用这样的属性。

另外,依靠这种行为有没有陷阱?

回答

4

是的。

从[stmt.return]/3:

返回的实体中的复制初始化临时对象的破坏之前,在结束由所述返回的操作数建立的充分表达的 测序语句,该语句在 之前被排序,销毁包含return语句的块的局部变量(6.6)。