Ad esempio, esiste una funzione che trova un oggetto e restituisce shared_ptr se viene trovato l'oggetto e deve indicare in qualche modo che nessun oggetto è stato trovato.E 'corretto restituire 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");
}
È esatto per tornare shared_ptr implicitamente inizializzato con nullptr come nell'esempio in alto? Funzionerà, ma può essere fatto in questo modo? O dovrei restituire shared_ptr predefinito costruito invece?
Che cosa sarebbe se fosse weak_ptr? Qual è il modo corretto per verificare che sia stato restituito weak_ptr vuoto? da weak_ptr :: funzione scaduta o ci sono altri modi? Se il controllo di weak_ptr :: expired è l'unico modo, allora come posso distinguere quella funzione che ha restituito un puntatore vuoto o l'oggetto è stato appena cancellato (ambiente multi-thread)?
un'alternativa sarebbe quella di gettare un'eccezione –
@ AndersK. La situazione in cui l'oggetto non viene trovato è una situazione comune come se si trovasse l'oggetto. –
ok, quindi l'eccezione non è una buona scelta. –