在没有复制省略的情况下,是否保证在析构函数之前调用复制/移动构造函数?

时间:2015-07-12 11:07:14

标签: c++ semantics

相当于标题所说的内容。考虑这个例子:

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

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

在没有复制省略的情况下,MyClass的复制或移动构造函数是否保证在析构函数之前被调用,因为对func()的调用返回myInstance?我想像std::shared_ptr这样的类在按值返回时会使用这样的属性。

此外,依赖这种行为是否存在任何陷阱?

1 个答案:

答案 0 :(得分:4)

来自[stmt.return] / 3:

  

返回实体的复制初始化在结束时临时销毁之前进行排序   返回语句的操作数建立的完整表达式,然后按顺序排序   包含return语句的块的局部变量(6.6)的破坏。