c++ - 当你想实现一个可以返回 "nothing"的函数时,何时使用 boost::optional 以及何时使用 std::unique_ptr ?

标签 c++ boost c++11 unique-ptr boost-optional

据我了解,有两种方法可以实现有时不返回结果的函数(例如在 ppl 列表中找到的人)。

*- 我们忽略原始 ptr 版本,与 bool 标志配对,并在未找到版本时出现异常。

boost::optional<Person> findPersonInList();

std::unique_ptr<Person> findPersonInList();

那么有什么理由比另一个更喜欢一个吗?

最佳答案

这取决于:您希望返回句柄还是拷贝

如果你想返回一个句柄:

  • Person*
  • boost::optional<Person&>

都是可接受的选择。我倾向于使用 Ptr<Person>在空访问的情况下抛出的类,但这是我的偏执狂。

如果您希望返回拷贝:

  • boost::optional<Person>对于非多态类
  • std::unique_ptr<Person>用于多态类

因为动态分配会产生开销,所以您只在必要时使用它。

关于c++ - 当你想实现一个可以返回 "nothing"的函数时,何时使用 boost::optional 以及何时使用 std::unique_ptr ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14360706/

相关文章:

c++ - 学习 C++ 需要有关程序作业的帮助

c++ - 如何使用单个字母组成单词

c++ - 使用 const 键类型引用调用 std::set of pointers 的 count 方法

c++ - 成员右值引用和对象生命周期

c++ - 编译器错误或非标准代码? - lambda 中的可变参数模板捕获

c++ - emplace_back 没有创建就地对象

c++ - 我可以为 qt 简化以下代码吗?

c++ - std::pair 提示类型不完整

c++ - 轮询命令以在 boost asio 中发送共享队列

c++ - boost::program_options 缓冲区溢出