たとえば、オブジェクトを見つけてobjectが見つかった場合はshared_ptrを返す関数があり、オブジェクトが見つからなかったことを何らかの形で示す必要があります。null shared_ptrを返すのは正しいですか?
std::vector<std::shared_ptr> Storage::objects;
std::shared_ptr<Object> Storage::findObject()
{
if (objects.find)
{
return objects[x];
}
else
{
return nullptr;
}
}
std::shared_ptr<Object> obj = Storage::findObject();
if (obj)
{
print("found");
}
else
{
print("not found");
}
暗黙のうち、上の例のようにnullptrで初期化されたのshared_ptrを返すように、それは正しいですか?それはうまくいくでしょうが、それはこのようにすることができますか?または代わりにshared_ptrのデフォルトを返す必要がありますか?
weak_ptrの場合はどうなりますか?空のweak_ptrが返されたことを確認する適切な方法は何ですか? weak_ptr :: expired関数または他の方法がありますか?もしweak_ptr :: expiredによるチェックが唯一の方法なら、どうすればその関数が空ポインタを返すか、オブジェクトがただ削除された(マルチスレッド環境)かを区別できますか?
代わりに、例外 –
@AndersKをスローすることです。オブジェクトが見つからない場合は、オブジェクトが見つかった場合と同様の状況になります。 –
OK、例外は良い選択ではありません。 –