函数不接受autoptr的迭代器

function wont accept iterator to auto_ptr

本文关键字:迭代器 autoptr 不接受 函数      更新时间:2023-10-16

我写了一些有缺陷的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> >;

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