【发布时间】: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()而不仅仅是L和R? -
你想要
std::unique_ptr<>。 -
@NikolaiNFetissov - 仅当 tr1/C++11 可用时。
-
标准禁止使用
vector<auto_ptr<T> >。你不能指望它正常工作。 -
auto_ptr 的复制构造函数不作为副本操作,因此它与 std::vector 不兼容。
标签: c++ standard-library auto-ptr huffman-code