1. ホーム
  2. rust

[解決済み] RustのRc::clone(&rc)とrc.clone()は何か違いがあるのでしょうか?また、それによるコンパイルの最適化はあるのでしょうか?

2022-01-31 14:28:21

質問

rustの本では Rc::clone(&rc) オーバー rc.clone() を次のようにします。

use std::rc::Rc;

let five = Rc::new(5);

// recommended
let _ = Rc::clone(&five);

// not recommended
let _ = five.clone();


なぜ?

解決方法は?

関数構文( Rc::clone(&rc) ) は、参照されている基本オブジェクトのクローンを作るのではなく、新しい共有参照を作るだけ (安価) であることを明確にしています (高価かもしれません)。任意の参照カウント型では、浅いコピーか深いコピーかはっきりしないかもしれません。

この可読性・明瞭性の問題から 参照カウントされたポインタ型のクローンを作成するための別のインターフェースの提案 とのことです。 リンターは、参照カウントされた型がメソッド経由でクローンされたときに警告するようになりました。 .