<bdo id='rWHSm'></bdo><ul id='rWHSm'></ul>
    1. <legend id='rWHSm'><style id='rWHSm'><dir id='rWHSm'><q id='rWHSm'></q></dir></style></legend>

      1. <tfoot id='rWHSm'></tfoot>

        <small id='rWHSm'></small><noframes id='rWHSm'>

      2. <i id='rWHSm'><tr id='rWHSm'><dt id='rWHSm'><q id='rWHSm'><span id='rWHSm'><b id='rWHSm'><form id='rWHSm'><ins id='rWHSm'></ins><ul id='rWHSm'></ul><sub id='rWHSm'></sub></form><legend id='rWHSm'></legend><bdo id='rWHSm'><pre id='rWHSm'><center id='rWHSm'></center></pre></bdo></b><th id='rWHSm'></th></span></q></dt></tr></i><div id='rWHSm'><tfoot id='rWHSm'></tfoot><dl id='rWHSm'><fieldset id='rWHSm'></fieldset></dl></div>

        何时使用 boost::optional 以及何时使用 std::unique_ptr 在您想要实现一个可以返回“无&q

        时间:2023-07-19
      3. <legend id='x62c1'><style id='x62c1'><dir id='x62c1'><q id='x62c1'></q></dir></style></legend>

          • <small id='x62c1'></small><noframes id='x62c1'>

                <tbody id='x62c1'></tbody>

              • <bdo id='x62c1'></bdo><ul id='x62c1'></ul>

                  <tfoot id='x62c1'></tfoot>
                  <i id='x62c1'><tr id='x62c1'><dt id='x62c1'><q id='x62c1'><span id='x62c1'><b id='x62c1'><form id='x62c1'><ins id='x62c1'></ins><ul id='x62c1'></ul><sub id='x62c1'></sub></form><legend id='x62c1'></legend><bdo id='x62c1'><pre id='x62c1'><center id='x62c1'></center></pre></bdo></b><th id='x62c1'></th></span></q></dt></tr></i><div id='x62c1'><tfoot id='x62c1'></tfoot><dl id='x62c1'><fieldset id='x62c1'></fieldset></dl></div>
                • 本文介绍了何时使用 boost::optional 以及何时使用 std::unique_ptr 在您想要实现一个可以返回“无"的函数的情况下?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  据我所知,有 2* 种方法可以实现有时不返回结果的函数(例如在 ppl 列表中找到的人).

                  From what I understand there are 2* ways you can implement a function that sometimes doesnt return a result(for example is person found in a list of ppl).

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

                  *- we ignore raw ptr version, pair with a bool flag, and exception when none found version.

                  boost::optional<Person> findPersonInList();
                  

                  std::unique_ptr<Person> findPersonInList();
                  

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

                  So are there any reasons to prefere one over the other?

                  推荐答案

                  这取决于:您希望返回句柄还是副本.

                  It depends: do you wish to return a handle or a copy.

                  如果你想返回一个句柄:

                  • 人*
                  • boost::optional

                  都是可以接受的选择.我倾向于使用 Ptr 类,它会在访问空值时抛出异常,但那是我的偏执.

                  are both acceptable choices. I tend to use a Ptr<Person> class which throws in case of null access, but that's my paranoia.

                  如果您希望返回副本:

                  • boost::optional 用于非多态类
                  • std::unique_ptr 用于多态类
                  • boost::optional<Person> for non polymorphic classes
                  • std::unique_ptr<Person> for polymorphic classes

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

                  because dynamic allocation incurs an overhead, so you only use it when necessary.

                  这篇关于何时使用 boost::optional 以及何时使用 std::unique_ptr 在您想要实现一个可以返回“无"的函数的情况下?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:C++11 中的 intrusive_ptr 下一篇:如何将参数传递给 boost::thread?

                  相关文章

                    <i id='W8BGZ'><tr id='W8BGZ'><dt id='W8BGZ'><q id='W8BGZ'><span id='W8BGZ'><b id='W8BGZ'><form id='W8BGZ'><ins id='W8BGZ'></ins><ul id='W8BGZ'></ul><sub id='W8BGZ'></sub></form><legend id='W8BGZ'></legend><bdo id='W8BGZ'><pre id='W8BGZ'><center id='W8BGZ'></center></pre></bdo></b><th id='W8BGZ'></th></span></q></dt></tr></i><div id='W8BGZ'><tfoot id='W8BGZ'></tfoot><dl id='W8BGZ'><fieldset id='W8BGZ'></fieldset></dl></div>
                      <bdo id='W8BGZ'></bdo><ul id='W8BGZ'></ul>
                  1. <small id='W8BGZ'></small><noframes id='W8BGZ'>

                      <legend id='W8BGZ'><style id='W8BGZ'><dir id='W8BGZ'><q id='W8BGZ'></q></dir></style></legend>

                      <tfoot id='W8BGZ'></tfoot>