小编Sam*_*von的帖子

为什么调用`fn pop(&mut self) - > Result <T,&str>`继续借用我的数据结构?

我正在开发一些基本的数据结构来学习语法和Rust.这是我为堆栈提出的:

#[allow(dead_code)]
mod stack {
    pub struct Stack<T> {
        data: Vec<T>,
    }

    impl<T> Stack<T> {
        pub fn new() -> Stack<T> {
            return Stack { data: Vec::new() };
        }

        pub fn pop(&mut self) -> Result<T, &str> {
            let len: usize = self.data.len();

            if len > 0 {
                let idx_to_rmv: usize = len - 1;
                let last: T = self.data.remove(idx_to_rmv);
                return Result::Ok(last);
            } else {
                return Result::Err("Empty stack");
            }
        }

        pub fn push(&mut self, elem: T) {
            self.data.push(elem);
        }

        pub fn is_empty(&self) …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

3
推荐指数
1
解决办法
98
查看次数

C++ 对象泄漏

我目前正在学习 C++,并且正在体验对象的局部范围。

如果我理解正确,请使用以下代码:

void stepOne() {
TestClass t1;
t1.thisIsAInt = 2;}
Run Code Online (Sandbox Code Playgroud)

一旦我们退出 stepOne 方法的作用域,t1 对象就应该从内存中清除。

现在,我想对此进行测试,因此使用调试器获得了对象的地址,一旦我回到main,我就在从调试器获得的地址上创建了一个指针。

我惊讶地发现指针仍然指向我之前创建的同一个对象。

通常,据我所知,自从我们离开作用域后,对象就会被清除内存。

现在,

  • 我没有正确理解它吗?
  • 获取它的地址是否使它不离开范围?
  • 它是操作系统的可用内存,还没有清除吗?(用零填充)
  • 如果我将指针传递给 stepOne 中的函数,一旦我离开作用域,它还会被清除吗?(我知道我可以使用智能指针,以确保它只在本地范围内存活)

c++ pointers

2
推荐指数
1
解决办法
297
查看次数

标签 统计

borrow-checker ×1

c++ ×1

pointers ×1

rust ×1