Odpovídáte na názor ke článku Destructive Move v C++?.
Volaný je vůbec ničit ale nemusí. Destructive move znamená to, že ty data se proste opustí a ta instance zanikne, a calling convention tady nemá žádný vliv. Rust to vyřešil naprosto nejlíp, protože move znamená, že se udělá prostě memcpy (takže ty data musí být jak jinak než "movable").
Problém u C++ je, že celá semantika std::move() a &&ref nevynucuje, že k tomu "move" opravdu dojde, a to je vážný problém - compiler by musel dělat mnohem hlubší analýzu kódu než teď, a protože C++ nevyžaduje mít zdrojáky knihoven (stačí hlavičkové soubory), tak zkoumat jak je něco implementované v knihovnách prostě nejde (tady to má rust jednodušší, protože používá jen C ABI a vyžaduje static linking všech rustích závislostí, takže do těch funkcí "vidí").
Další věc je exception safety - co by se tak mělo stát, když chci udělat move argumentu, co předávám funkci, a ještě než dojde k tomu move, tak se výhodí exception? Instance by nezanikla v té funkci a byl by to memory leak? Tady by bylo potřeba mít nějaký flag, který by to hlídal (a myslím, že rust přesně toto dělá).
Ale jak píšu, nikdy bych neříkal nikdy, přecejenom je to C++ a tam je možné všechno :)
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 57 593×
Přečteno 27 720×
Přečteno 26 401×
Přečteno 24 367×
Přečteno 22 864×