首页 > 解决方案 > Rust 将指向对象的指针传递给类函数

问题描述

我在创建一个包含对象向量的对象时遇到问题:

pub struct ParticleSystem {
    particles: Vec<Particle>
}

impl ParticleSystem {
    pub fn new() -> ParticleSystem {
        ParticleSystem {
            particles: Vec::new()
        }
    }
}

我需要能够在不传递所有权的情况下从 Particle 类的函数中访问此对象中的向量。

let mut system = ParticleSystem::new();

我将如何将指向 this 的指针传递给函数?我对生锈很陌生。感谢您的帮助,当我尝试过时,它只是传递了所有权并干扰了程序的其他方面。

标签: rust

解决方案


如果您需要在 中相互比较,Particle可以将对其他s 的引用作为参数传递:ParticleParticleSystemParticle

impl Particle {
    pub fn has_collision(&self, others: &[Particle]) -> bool {
        for other in others {
            if other.dist(self) < threshold {
                return true;
            }
        }
        false
    }
}

这比每个Particle都有自己对整个系统的引用要简单得多,因为借用只持续到对函数的调用。如果Particle有一个字段是对整个系统的引用,那么这将变得更加复杂,因为 Rust 需要确保每个字段Particle都不能超过整个系统——这将需要大量工作并且可能需要运行时开销;例如,当您破坏系统时,您需要确保Particle在删除之前ParticleSystem删除每个。

此外,这种方式更节省内存,因为Particle结构不需要包含指向系统的指针。


推荐阅读