相当于标题所说的内容。考虑这个例子:
MyClass func()
{
MyClass myInstance;
return myInstance;
}
int main()
{
auto myInstance = func();
}
在没有复制省略的情况下,MyClass
的复制或移动构造函数是否保证在析构函数之前被调用,因为对func()
的调用返回myInstance
?我想像std::shared_ptr
这样的类在按值返回时会使用这样的属性。
此外,依赖这种行为是否存在任何陷阱?
答案 0 :(得分:4)
是
来自[stmt.return] / 3:
返回实体的复制初始化在结束时临时销毁之前进行排序 返回语句的操作数建立的完整表达式,然后按顺序排序 包含return语句的块的局部变量(6.6)的破坏。