存储指向用 NRVO 返回的对象的指针
Storing a pointer to object returned with NRVO
如果我编写一个工厂方法在本地实例化一个对象,然后按值 returns,打算利用 NRVO(根据此处的一些答案:c++11 Return value optimization or move?),将a pointer/reference 到本地对象指向分配给方法的 return 值的对象?
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 吗?
没有
您正在存储一个悬挂指针。
您的程序在使用此指针时将具有未定义的行为,就是这样。
再多方便的优化也无法挽救您的命运。
如果我编写一个工厂方法在本地实例化一个对象,然后按值 returns,打算利用 NRVO(根据此处的一些答案:c++11 Return value optimization or move?),将a pointer/reference 到本地对象指向分配给方法的 return 值的对象?
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 吗?
没有
您正在存储一个悬挂指针。
您的程序在使用此指针时将具有未定义的行为,就是这样。
再多方便的优化也无法挽救您的命运。