This issue似乎暗示它只是一個實現細節(memcpy
vs ???),但我找不到任何明確的差異描述。Copy與Clone有什麼區別?
46
A
回答
56
Clone
是專爲任意重複:一個Clone
實施一種T
可以做創建一個新的T
需要任意複雜的操作。這是一種正常的特徵(除前奏之外),因此需要像正常特徵一樣使用方法調用等。
Copy
特徵代表可通過memcpy
安全複製的值:諸如重新分配之類的東西並且將一個參數傳遞給一個函數總是memcpy
s,對於Copy
類型,編譯器明白它不需要考慮那些a move。
41
主要區別在於克隆是明確的。隱式符號表示移動到非Copy
類型。
// u8 implements Copy
let x: u8 = 123;
let y = x;
// x can still be used
println!("x={}, y={}", x, y);
// Vec<u8> implements Clone, but not Copy
let v: Vec<u8> = vec![1, 2, 3];
let w = v.clone();
//let w = v // This would *move* the value, rendering v unusable.
順便說一句,每個Copy
類型也必須是Clone
。但是,他們不需要做同樣的事情!對於您自己的類型,.clone()
可以是您選擇的任意方法,而隱式複製將始終觸發memcpy
,而不是clone(&self)
實現。
+1
酷!這清除了我關於Clone特徵是否提供隱式複製的第二個問題。發現這個問題,這個問題比我想象的更多。謝謝! – user12341234
相關問題
- 1. .clone()和.html()有什麼區別?
- 2. git clone和checkout有什麼區別?
- 3. alloc,copy和new有什麼區別?
- 4. #include和copy&paste有什麼區別?
- 5. git clone和git clone --mirror有什麼區別?
- 6. sk_buff copy&sk_buff clone
- 7. Xcode構建階段的Copy Bundle Resources和Copy Files之間有什麼區別?
- 8. Ruby的dup和clone方法有什麼區別?
- 9. 「git clone」和「git remote add」有什麼區別?
- 10. ConstraintSet中clone()的不同實現之間有什麼區別?
- 11. 繼承與類別有什麼區別
- 12. XSLT:<copy-of>和<apply-templates>有什麼區別?
- 13. 創建分支的svn copy和svn merge有什麼區別?
- 14. 有什麼區別
- 15. 有什麼區別
- 16. 有什麼區別?
- 17. 有什麼區別?
- 18. 有什麼區別?
- 19. 有什麼區別
- 20. ....有什麼區別?
- 21. 有什麼區別?
- 22. 有什麼區別
- 23. 有什麼區別
- 24. 有什麼區別
- 25. 有什麼區別?
- 26. 有什麼區別`和$(Bash中有什麼區別?
- 27. 與%i和%li有什麼區別?
- 28. Gateway與Service Activator有什麼區別?
- 29. ldapAuthentication與inMemoryAuthentication有什麼區別?
- 30. float x []與float [] x有什麼區別?
我可以理解爲「克隆」是一個深層複製,而「複製」是影子複製? – Djvu
'克隆'打開*可能性*類型可能做一個深層或淺層的副本:「任意複雜」。 – poolie