Odpověď na názor

Odpovídáte na názor ke článku Destructive Move v C++?.

  • 4. 7. 2025 22:46

    cc

    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 :)