我遇到这种情况的具体情况是使用 OpenGL,struct为 aVertexBuffer和VertexArray. 本质上,每个结构体都是一个GLuint指向 OpenGL 对象的单个结构体。在最简单的情况下, aVertexArray恰好有一个VertexBuffer与之关联。
问题是VertexArray不能比其关联的VertexBuffer. Rust 不知道这一点,因为VertexArray持有的引用是 OpenGL 内部的,所以VertexBuffer在现有VertexArray引用它时调用析构函数没有问题。
我目前的解决方案是手动放置一个引用,该引用未使用:
struct VertexArray<'a> {
id: GLuint,
#[warn(dead_code)]
vbo: &'a VertexBuffer
}
Run Code Online (Sandbox Code Playgroud)
在更复杂的情况下,引用可能是必要的,但感觉不优雅和浪费。可以使用引用数组/向量来实现具有多个 VBO 的 VAO。能够在创建 VAO 之后更改关联的缓冲区也可能会增加此要求。
有没有办法在没有参考的情况下实现相同的行为?或者,既然编译器可以识别出该引用从未被使用并给出警告,那么它会被优化掉吗?