オブジェクトをローカルでインスタンス化して値で返すファクトリメソッドを書くと、NRVO(ここではいくつかの答えに応じて:c++11 Return value optimization or move?)を利用しようとすると、ポインタ/ローカルオブジェクトへの参照は、メソッドの戻り値が割り当てられているオブジェクトを指していますか?使用の際にNRVOで返されたオブジェクトへのポインタの格納
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を参照していますか?
これはUBです。何かが起こる可能性があります。 – lorro
C++ 17の保証されたコピーellisionを考慮しても、UndefinedBehavior Landへの無料チケットのようです。あなたの関数があなたがすると思われることをしても、あなたの 'ObjectBuilder'がそれにアクセスする限り、呼び出し元がオブジェクトの存続期間をどのように維持することを保証しますか? – KABoissonneault
C++の17(N)RVOが保証されていれば、これは実際に有効であるかもしれません。 – nwp