Sco*_*ver 8 c++ copy-elision c++11
如果我编写一个在本地实例化对象然后按值返回的工厂方法,打算利用NRVO(根据这里的一些答案:c ++ 11返回值优化或移动?),指针/引用将是本地对象指向分配了方法返回值的对象?
Object ObjectBuilder::BuildObject( void )
{
Object obj;
//this->ObjectReference = obj; //Disregard this
//OR
this->ObjectPtr = &obj;
return obj;
}
Run Code Online (Sandbox Code Playgroud)
正在使用:
ObjectBuilder builder;
Object newObject = builder.BuildObject();
Run Code Online (Sandbox Code Playgroud)
builder.ObjectPtr是否引用newObject?
没有.
你正在存储一个悬空指针.
当您的程序使用此指针时,它将具有未定义的行为,就是这样.
没有多少方便的优化可以帮助您免于命运.