在系统中只创建一个实例的结构创建和使用的最佳方法是什么?是的,这是必要的,它是OpenGL子系统,制作多个副本并将其传递到各处会增加混乱,而不是减轻它.
单身人士需要尽可能高效.似乎不可能在静态区域上存储任意对象,因为它包含Vec
带有析构函数的对象.第二个选项是在静态区域存储(不安全)指针,指向堆分配单例.什么是最方便和最安全的方法,同时保持语法简洁.
这是一个有争议的话题,所以让我先解释一下我的用例,然后再谈谈实际问题.
我发现对于一堆不安全的东西,确保你不泄漏记忆是很重要的; 如果你开始使用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 ×2