【问题标题】:C++ std::auto_ptr copy constructorC++ std::auto_ptr 复制构造函数
【发布时间】:2011-04-27 16:11:20
【问题描述】:

std::auto_ptr 缺少 const 复制构造函数,因此我不能直接在集合中使用它。有什么方法可以在不使用 boost 指针集合模板的情况下获得例如 std::auto_ptr 的向量?

【问题讨论】:

    标签: c++ auto-ptr


    【解决方案1】:

    如果您有 C++0x 编译器,您可以酌情使用shared_ptr 或unique_ptr。

    @James McNellis 提供了正确的 unique_ptr 用法 here 的一个很好的例子。对于shared_ptr 演练查看here,由@D.Shawley 提供。 [我敢肯定,在这些线程上仍然会受到支持。]

    auto_ptr 的vector 始终无效,尽管 Visual C++ v6 不同意。

    【讨论】:

    • shared_ptr 不需要 C++0x;它在 TR1 中。
    • @Potatoswatter - 感谢您的澄清说明 - 如果 OP 可以访问 unique_ptr,则更适合纠正有缺陷的 auto_ptr 语义。
    【解决方案2】:

    不,你不能拥有std::auto_ptr 的向量,尽管有很多猜测你可以。但是,如果您的编译器支持 C++0x,您可以使用 std::unique_ptr,这是已弃用的自动指针的新替代方案,引用新标准,提供了更好的替代方案。另见this thread

    【讨论】:

      【解决方案3】:

      auto_ptr 设计用于在变量离开范围时自动删除。您不想在集合中使用它,而是如上所述您想使用 shared_ptr 之类的东西。

      auto_ptr 的典型使用示例:

      void foo()
      {
         auto_ptr<int> bar = auto_ptr<int>(new int);
         ...
      
         return;  //memory held by auto_ptr is automatically deleted
      }
      

      如果您不确定 auto_ptr 的特殊语义,则任何超出此用途的内容都有潜在的危险和/或损坏。 (编辑:根据 Armen 的评论进行澄清)

      【讨论】:

      • 我会反对你的说法“任何超出此用途的东西都可能是危险的和/或损坏的”......
      • 很公平,还有其他有效用途。尽管 auto_ptr 的用途相对有限,但如果您在受限范围之外使用它可能会相当危险,例如作为函数中的局部变量。
      猜你喜欢
      • 2018-03-12
      • 1970-01-01
      • 2016-12-19
      • 2015-08-21
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多