< 返回版块

javaer 发表于 2019-01-18 14:27

本身是java程序猿,现在学习rust,写了段代码

pub fn init_node(regions:& Vec<RefCell<Region>>)->Vec<Node>{
        let mut nodes:Vec<Node>=vec![];
        for region in regions {

            let temp_nodes:Vec<Node>=Region::generate_node( region.borrow().deref());
            for temp_node in temp_nodes {
                nodes.push(temp_node);
            }
        }
        nodes
    }

大概的逻辑是,传进来一个对象,生成一个对象,返回,
报了错,
Local variables, function parameters and temporaries are all dropped before the end of the function body. So a reference to them cannot be returned.
我理解的意思是,
生成的对象所占用的内存是在这个方法执行的方法栈里,当方法返回结束的时候,这个生成的对象就随着方法的返回而被回收了
现在的问题是:

  1. 在rust里,怎么控制对象是在栈里分配,还是在堆里分配
  2. 我要实现一个类似上面的功能,我该怎么做,亦或者,我该改变这种考虑问题的方式吗?

评论区

写评论
chirsz 2019-01-29 19:12

一般改成nodes.push(temp_node.clone())就行了

1 共 1 条评论, 1 页