次のコードがあります。
struct Node {
id: uint
}
struct Graph {
nodes: Vec<Node>
}
impl Graph {
fn new() -> Graph {
return Graph { nodes: Vec::new() };
}
fn create_node(&mut self) -> &Node {
let index = self.nodes.len();
let node = Node { id: index };
self.nodes.push(node);
// return &node; // error: `node` does not live long enough
return &self.nodes[index]; // ...but this work fine
}
}
アイデアは、グラフが新しいノードを作成し、それをメソッドを呼び出す人に「貸与」することです。しかし、新しく作成された構造への参照を返す方法がわかりません。2 番目のリターンは正常に機能していますが、明らかに効果的ではありません。
ベクトルからノードを取り戻さずにノードを返す方法は?