我刚开始学习 C++。
在 C 中我只使用 Node* cur_node
,但在 C++ 中这不起作用:
struct Node {
int val;
};
struct Foo {
unique_ptr<vector<Node>> nodes;
unique_ptr<&Node> cur_node;
};
int main() {
Foo foo;
foo.nodes = make_unique<vector<Node>>();
foo.nodes->push_back((Node){.val=100});
//d.cur_node = d.nodes[0];
foo.cur_node = make_unique<&Node>(((*d.nodes)[0]));
(*d.nodes)[0].val = 200;
cout << d.cur_node->val << endl;;
cout << (*d.nodes)[0].val << endl;;
}
error: 'Node' does not refer to a value
unique_ptr<&Node> cur_node;
如果我不使用引用,值被复制,我无法通过修改cur_node
来修改原始 vector 。
也许为此我需要 shared_ptr
?
编辑
更清楚一点:我想让cur_node
包含对vector中的一个值的引用,通过修改cur_node
来修改原始vector,只是就像我使用原始 C 指针一样。
谢谢
最佳答案
您仍然可以使用Node *
,但是您需要注意 vector 的pointer invalidation rules。 .
struct Foo {
unique_ptr<vector<Node>> nodes;
Node * cur_node;
};
int main() {
Foo foo;
foo.nodes = make_unique<vector<Node>>();
foo.nodes->push_back((Node){.val=100});
foo.cur_node = &d.nodes->at(0);
d.nodes->at(0).val = 200;
cout << d.cur_node->val << endl;;
cout << d.nodes->at(0).val << endl;;
}
为什么不只保留索引?
struct Foo {
unique_ptr<vector<Node>> nodes;
size_t cur_index;
Node & cur_node() { return nodes->at(cur_index); }
};
int main() {
Foo foo;
foo.nodes = make_unique<vector<Node>>();
foo.nodes->push_back((Node){.val=100});
foo.cur_index = 0;
d.nodes->at(0).val = 200;
cout << d.cur_node().val << endl;;
cout << d.nodes->at(0).val << endl;;
}
关于c++ - 如何使用对 vector 元素的 unique_ptr 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57863576/