API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
Does it make sense for an API to return std::optional of a smart pointer to clearly specify that the pointer may be null?
C++有一个坏习惯,假设当你调用一个返回一些智能指针的函数时,你得到的值std::unique_ptr/std::shared_ptr
你得到的值是"总是"不为空。
C++17引入了新的std::optional
类,它非常清楚地表明该值实际上可能是空的。我了解std::optional
值类型的优势。
所以我想知道 API 从设计角度返回智能指针的可选值是否有意义(其中nullptr
是一个可能的返回值,这意味着对象可能不存在(?
假设我有一个类,其方法返回一些智能指针:
class MyClass
{
public:
std::optional<std::shared_ptr<SomeSharedObject>> GetSomething();
};
还是太过分了?
我想说这取决于函数在成功执行后返回nullptr
是否有效/预期(可能是也可能不是,取决于这个函数应该做什么(。如果通过返回值处理错误是您想要执行的操作,那么使用std::optional
来表示错误的发生可能是一种方法。但是,请注意,这样做将不允许您返回其他错误信息。如果函数应该在成功时返回对象的所有权,而其他任何内容都意味着失败,那么您可以使用nullptr
状态来表示错误并节省std::optional
的开销(它很小,但不是完全免费的,因为它必须跟踪和测试值是否存在(。同样,当然,不可能传递错误信息...
相关文章:
- 将常量指针引用绑定到非常量指针
- 运行时错误:引用绑定到类型为"int"的空指针
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- 与简单地创建派生类指针相比,将基类绑定到派生类有什么优点?
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 努力将指向成员函数的指针绑定到类模板的T成员,然后在槽中调用
- 将引用绑定到指针的语法是什么?(各种)
- 为什么 VS 无法将右值引用绑定到指针?
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 函数参数绑定通过参考与传递指针传递数组的规则
- 排序时引用绑定到 'value_type' 类型的 null 指针
- PyBind11:绑定使用双指针的函数
- C++绑定函数到指针
- 如何破坏包含自指指针的对象
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 如何将函数指针传递给绑定
- 指向成员的指针如何知道它绑定了哪个成员
- Swig - 绑定返回对控制器类指针的引用的方法
- RValue 引用在将其绑定(非指针)对象分配给另一个指针后是否会删除该对象?
- 指您不拥有的"std::unique_ptr"(使用原始指针?