我有一个困惑,当函数可能失败时,应该如何从函数返回智能指针。以下是几种选项:
- 如果函数失败,则返回指针并抛出异常:
std::shared_ptr foo() { // ... if (!ok) throw; return ptr; }
- 如果函数失败,则返回空指针:
std::shared_ptr foo() { // ... if (!ok) return std::shared_ptr();
return ptr; }
- 通过引用传递指针,并返回布尔标志:
bool foo(std::shared_ptr& ptr) { // ... if (ok) ptr = ...;
return ok; }
是否有最佳实践或指南来报告函数未正确执行?还是这通常是项目特定的?
感谢您的回答。
throw;
,程序将终止。第一个和第二个都可以,但某些代码库不允许使用异常,在这种情况下,第二个选项是您唯一的选择。我的首选是使用第二个选项,除非这是一种情况,在这种情况下,如果foo()
失败,调用者可能无法做出明智的选择,那么您应该选择第一个选项。 - Praetorian