私たちはかなり厄介なことができNULLに対してチェックする必要はありません知っているインスタンスのために生のポインタのネストされたメンバーにアクセスするための表記法:生ポインタのメンバーに簡単にアクセスできますか?
struct MyLink {
link: *mut MyLink,
}
let var = *(*(*(*root).link).link).link;
は生のポインタの構造体のメンバがなくてもアクセスすることができます毎回明示的に参照解除する必要がありますか?たぶんroot.link().link().link()
のようなメソッドを使うか、型をラップすることで?
慣用的なRustはこれを回避しますが、回避しにくい例外的なケースがあります。 Rc
にメモリオーバヘッドがあり、借用チェッカーが相互リンクメンバの問題を引き起こし、C-APIがポインタを必要とするなど...
ラッパーメソッドのアプローチを試しましたか?私はまた、そのエッジケースについて非常に興味があります。 –
@ E_net4、私はまだ試していませんでした(どのように書かれるかわからない)が、最も有望な解決策のようだ。 – ideasman42
"[Rustのポインタ]はNULLと照合する必要はありません"とは言えません。参照にはそのプロパティがあり(nullにはできません)、そのために貸借チェッカーが適用されています(ダングリング参照を防止するため)。一方、ポインタはnullでも構いませんが、安全性チェックは 'unsafe'ブロックの外で参照解除できないことです。 – ampron