This issue wydaje się sugerować, że to tylko szczegół implementacji (memcpy
vs ???), ale nie mogę znaleźć żadnego wyraźnego opisu różnic.Jaka jest różnica między kopiowaniem a klonowaniem?
Odpowiedz
Clone
przeznaczony jest dla dowolnych duplikacji: a Clone
realizacja dla typu T
można zrobić dowolnie skomplikowane operacje wymagane do utworzenia nowego T
. Jest normalną cechę (innego niż bycie w preludium), a więc wymaga używana jak normalna cecha, z wywołań metod itp
Copy
cecha reprezentuje wartości, które mogą być bezpiecznie powielane poprzez memcpy
: rzeczy jak nadpisywaniem i przekazywanie argumentu za wartością do funkcji jest zawsze memcpy
s, a więc dla typów Copy
, kompilator rozumie, że nie musi brać pod uwagę tych a move.
Główna różnica polega na tym, że klonowanie jest jawne. Zapis niejawny oznacza przenoszenie dla typu innego niż 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.
Nawiasem mówiąc, każdy Copy
typ jest również muszą być Clone
. Jednak nie są zobowiązani do zrobienia tego samego! Dla własnych typów, .clone()
może być dowolną dowolną metodą, podczas gdy niejawne kopiowanie zawsze wyzwala implementację memcpy
, a nie clone(&self)
.
Cool! To wyjaśnia drugie pytanie, które miałem odnośnie tego, czy cecha Klona zapewnia niejawne kopiowanie. Okazuje się, że to pytanie i ten był bardziej powiązany, niż myślałem. Dzięki! – user12341234
- 1. Jaka jest różnica między kopiowaniem a klonowaniem?
- 2. Różnica między klonowaniem a kopiowaniem w Mercurial
- 3. Różnica między klonowaniem a pobieraniem
- 4. Jaka jest różnica między wywołaniem przez odniesienie a kopiowaniem/przywracaniem?
- 5. Jaka jest różnica między zasobami pakietu kopiowania a kopiowaniem plików w fazach kompilacji Xcode?
- 6. Jaka jest różnica między cat_id a term_id?
- 7. Jaka jest różnica między IEnumerable a tablicami?
- 8. Jaka jest różnica między == a === w Verilog?
- 9. Jaka jest różnica między UseCase a Workflow?
- 10. Jaka jest różnica między pakietem a intencją?
- 11. Jaka jest różnica między węzłem a wierzchołkiem?
- 12. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 13. Jaka jest różnica między alertem a window.alert?
- 14. Jaka jest różnica między @android a android:
- 15. Jaka jest różnica między krotką a kompresją?
- 16. Jaka jest różnica między proxy a reify?
- 17. Jaka jest różnica między @Inject a @PersistenceContext?
- 18. Jaka jest różnica między sqlite3 a pdo_sqlite
- 19. Jaka jest różnica między Const a Constant?
- 20. Jaka jest różnica między Socket.IO a Firebase?
- 21. Jaka jest różnica między macierzą a tablix?
- 22. Jaka jest różnica między KERN_INVALID_ADDRESS a KERN_PROTECTION_FAILURE?
- 23. Jaka jest różnica między Float.POSITIVE_INFINITY a Float.MAX_VALUE?
- 24. Jaka jest różnica między SGML a XML?
- 25. Jaka jest różnica między Cake a Leiningen?
- 26. Jaka jest różnica między JavaBean a POJO?
- 27. Jaka jest różnica między HAVING a WHERE?
- 28. Jaka jest różnica między ItemTemplate a ItemPanelTemplate?
- 29. Jaka jest różnica między słownikiem a tablicą?
- 30. Jaka jest różnica między cancelBubble a stopPropagation?
Czy mogę zrozumieć, że 'Klon' to kopia głęboka, a' Kopiuj' to kopia w tle? – Djvu
'Klon' otwiera * możliwość *, że typ może wykonać głęboką lub płytką kopię:" dowolnie skomplikowany ". – poolie