Portál AbcLinuxu, 1. května 2025 07:23
std::unique_ptr
se bez move sémantiky nedal implementovat.
Neviete mi ukázať nejaké konkrétne prípady z reálneho sveta?Kromě výkonu a zmíněného
unique_ptr
je move občas užitečný na přesunutí různých RAII guards z jednoho místa na jiné, např. zamčené zámky, otvřené soubory apod.
pozn: tak možno ešte Carbon a Rust??? ale o tom nemám infoRust nemá r-value reference, protože je nepotřebuje, move sémantiku podporuje přímo kompilátor, což je lepší v tom, že kompilátor zajistí, že přesunutou hodnotu nemůžeš na původním místě znova použít. V Rustu je move default, v C++ je default kopie. Tj. kód
foo.bar(baz);
v Rustu bude move, v C++ kopie hodnoty baz
. V C++ je potřeba explicitně provést move pomocí std::move(baz)
, v Rustu je potřeba explicitně udělat kopii pomocí baz.clone()
.
V Rustu je také možné přesouvat jakékoli typy, ne pouze ty, které to podporují díky správným konstruktorům. Druhá strana téhle mince je, že když je potřeba move zabránit, dělá se to trochu nešikovně přes Pin
wrapper a projekce.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.