相关疑难解决方法(0)

如何创建一个全局的,可变的单例?

在系统中只创建一个实例的结构创建和使用的最佳方法是什么?是的,这是必要的,它是OpenGL子系统,制作多个副本并将其传递到各处会增加混乱,而不是减轻它.

单身人士需要尽可能高效.似乎不可能在静态区域上存储任意对象,因为它包含Vec带有析构函数的对象.第二个选项是在静态区域存储(不安全)指针,指向堆分配单例.什么是最方便和最安全的方法,同时保持语法简洁.

rust

97
推荐指数
3
解决办法
3万
查看次数

你怎么能在Rust中制作一个安全的静态单例?

这是一个有争议的话题,所以让我先解释一下我的用例,然后再谈谈实际问题.

我发现对于一堆不安全的东西,确保你不泄漏记忆是很重要的; 如果你开始使用transmute()和,这实际上很容易做到forget().例如,将盒装实例传递给C代码一段任意时间,然后将其取回并使用"恢复它" transmute.

想象一下,我有这种API的安全包装:

trait Foo {}
struct CBox;

impl CBox {
    /// Stores value in a bound C api, forget(value)
    fn set<T: Foo>(value: T) {
        // ...
    }

    /// Periodically call this and maybe get a callback invoked
    fn poll(_: Box<Fn<(EventType, Foo), ()> + Send>) {
        // ...
    }
}

impl Drop for CBox {
    fn drop(&mut self) {
        // Safely load all saved Foo's here and discard them, preventing memory leaks
    } …
Run Code Online (Sandbox Code Playgroud)

rust

24
推荐指数
2
解决办法
9781
查看次数

标签 统计

rust ×2