8

如果我编写了一个在本地实例化对象然后按值返回的工厂方法,打算利用 NRVO(根据这里的一些答案:c++11 Return value optimization or move?),指针/引用会指向本地对象指向分配了方法返回值的对象?

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?

4

1 回答 1

5

不。

您正在存储一个悬空指针。

您的程序在使用此指针时将具有未定义的行为,就是这样。

再多方便的优化也无法将您从命运中拯救出来。

于 2016-06-30T13:43:41.773 回答