存储指向NRVO返回的对象的指针

时间:2016-06-30 13:21:31

标签: c++ c++11 copy-elision

如果我编写一个在本地实例化对象然后按值返回的工厂方法,打算利用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?

1 个答案:

答案 0 :(得分:5)

您正在存储悬空指针。

当你的程序使用这个指针时,它将具有未定义的行为,就是这样。

没有任何方便的优化可以帮助您避免命运。