関数からオブジェクトを出力パラメーターとして返したいのですが、オブジェクトにはデフォルトのコンストラクターがないため、これを行うことはできません。
bool FindFlaggedObject(MyObject& myObject)
{
std::vector<MyObject> myObjects = GetSomeObjectList();
for (UINT i = 0; i < myObjects.size(); i++)
{
if (myObjects[i].Flag) {
myObject = myObjects[i];
return true;
}
}
return false;
}
void main()
{
MyObject myObject; // NOT ALLOWED - OBJECT HAS NO DEFAULT CONSTRUCTOR
if (FindFlaggedObject(myObject))
{
...
}
}
したがって、ヒープに戻し、shared_ptrインスタンスで次のように管理する必要があるようです。
bool FindFlaggedObject(MyObject& myObject)
{
std::vector<MyObject> myObjects = GetSomeObjectList();
for (UINT i = 0; i < myObjects.size(); i++)
{
if (myObjects[i].Flag) {
myObject = new MyObject(myObjects[i]);
return true;
}
}
return false;
}
void main()
{
MyObject* myObjectPtr;
if (FindFlaggedObject(myObjectPtr))
{
std::shared_ptr<MyObject> myObject(myObjectPtr);
...
}
}
欠点は、メソッドを呼び出す人は誰でも、オブジェクトの割り当てを解除する責任があることを覚えておく必要があることです。
コンストラクターのないオブジェクトを出力パラメーターとして返すためのベストプラクティスは何ですか?