0

次のコードがあります。

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 番目のリターンは正常に機能していますが、明らかに効果的ではありません。

ベクトルからノードを取り戻さずにノードを返す方法は?

4

2 に答える 2