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

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?

Lig*_*ica 5

没有.

你正在存储一个悬空指针.

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

没有多少方便的优化可以帮助您免于命运.

  • 更像是,你正在返回一个副本并在内部保持一个悬空指针 (2认同)