I just have a dilemma, how should I return smart pointer from a function, when function might fail. I could pick one of the following options:
- Return pointer, and throw exception if function fails:
std::shared_ptr foo() {
// ...
if (!ok)
throw;
return ptr;
}
- Return pointer, and return empty pointer, if function fails
std::shared_ptr foo() {
// ...
if (!ok)
return std::shared_ptr();
return ptr;
}
- Pass pointer by reference, and return bool flag
bool foo(std::shared_ptr& ptr) {
// ...
if (ok)
ptr = ...;
return ok;
}
Is there any best practice, guideline, how to report, that function didn't execute properly? Or is it usually project-specific?
Thanks for your answers