如果我编写一个在本地实例化对象然后按值返回的工厂方法,打算利用NRVO(根据这里的一些答案:c++11 Return value optimization or move?),将指向本地的指针/引用object指向分配了方法返回值的对象?
Object ObjectBuilder::BuildObject( void )
{
Object obj;
//this->ObjectReference = obj; //Disregard this
//OR
this->ObjectPtr = &obj;
return obj;
}
使用中:
ObjectBuilder builder;
Object newObject = builder.BuildObject();
builder.ObjectPtr是否引用newObject?
答案 0 :(得分:5)
否强>
您正在存储悬空指针。
当你的程序使用这个指针时,它将具有未定义的行为,就是这样。
没有任何方便的优化可以帮助您避免命运。