例如,有一個函數可以找到一個對象,並在找到對象時返回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。沒有找到對象的情況與找到對象一樣常見。 –
好的,那麼異常並不是一個好的選擇。 –