struct Device;
struct CommandBuffer {
device: &Device,
// ...
}
// Does not work because Rust does not allow internal pointers
struct Something {
device: Device,
command_buffer: CommandBuffer,
}
一つの解決策は、Arc
`Arc 'を使わずに`内部ポインタ `を持つことは可能ですか?
struct CommandBuffer {
device: Arc<Device>,
// ...
}
struct Something {
device: Arc<Device>,
command_buffer: CommandBuffer,
}
を使用することであろうArc
の欠点は、間接、アトミックカウンタと範囲を脱出し、生きDevice
を維持する可能性があります。
今、私はあなたがRustの1レベル間接を回避できるとは思っていませんが、Box
とArc
の間に何かを作成することは可能でしょうか?
struct CommandBuffer {
device: BoxRef<Device>,
// ...
}
struct Something {
device: Box<Device>,
command_buffer: CommandBuffer,
}
BoxRef
を実装しようとしたときに、私が持っていた主な問題は、私はそれに借りが現在存在する場合でも、Box
を移動できるようにする必要があるということでした。それは間接的なレベルのために技術的に安全でなければなりませんが、私はこれが現在Rustで表現できるとは思いません。
let boxed_device = Box::new(device);
let device_ref = boxed_device.boxed_ref();
// Owner of the reference should be allowed to move
Something{device: boxed_device, CommandBuffer{device: device_ref}}
は
BoxRef
実装されていませんか?私は簡単に見て owning_ref しかし、私は持っている問題を解決するようではありません。錆の「内部ポインタ」を他にどのように表示する必要がありますか?
私は間違っているかもしれませんが、恐らく 'RefCell'の後ろにいるようですね? –
@SimonWhiteheadアクティブな借用がある場合、 'RefCell'も移動できません、または私はあなたの質問を誤解していますか? –
謝罪私はあなたのことを誤解したと思う。夜遅くだった。私が知っている限り、カスタムラッパーを使って 'Arc'や 'Rc'を知っている限り、これは唯一の方法です。 –