据我了解,有两种方法可以实现有时不返回结果的函数(例如在 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/