【问题标题】:function wont accept iterator to auto_ptr函数不会接受 auto_ptr 的迭代器
【发布时间】:2012-10-01 13:58:42
【问题描述】:

我写了一些我试图修复的有缺陷的 Huff 压缩代码。我做的第一件事是将指针切换到auto_ptr(我没有使用另一个智能指针是有原因的)。我创建了一个 auto_ptr 的向量,但是当我尝试通过 *(vector.begin()) 将 auto_ptr 传递给函数时,它不起作用。

我正在尝试将所有权传递给我的函数代码(它是作为 set_node 的成员函数):

struct Node {
    int weight;
    char litteral;
    auto_ptr<Node> childL;
    auto_ptr<Node> childR;
    void set_node(int w, char l, auto_ptr<Node>& L(), auto_ptr<Node>& R()){
        weight = w;
        litteral = l;
        childL = L;
        childR = R;
    }
};

这就是我尝试调用它的方式(p 是一个节点):

p.set_node(w, '*', *nodes->begin(), *(nodes->begin()+1));

这是向量的声明方式:

vector<auto_ptr<Node> >* nodes = new vector<auto_ptr<Node> >;

【问题讨论】:

  • 为什么是L()R() 而不仅仅是LR
  • 你想要std::unique_ptr&lt;&gt;
  • @NikolaiNFetissov - 仅当 tr1/C++11 可用时。
  • 标准禁止使用vector&lt;auto_ptr&lt;T&gt; &gt;。你不能指望它正常工作。
  • auto_ptr 的复制构造函数不作为副本操作,因此它与 std::vector 不兼容。

标签: c++ standard-library auto-ptr huffman-code


【解决方案1】:

不能std::vector 中使用std::auto_ptr。您将需要找到替代方案。问题是std::auto_ptr 中没有copy。复制构造函数在某种意义上是一个 move 操作,它从原始自动指针中窃取内容并将其移动到新指针。该操作要求源是非常量 std::auto_ptr(因为它会从中删除托管对象)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 2011-06-30
    • 2012-07-20
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多