Odpověď na názor

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

  • 4. 7. 2025 15:52

    cc

    Calling convention na design destructive move nikdy neměla vliv, ani C++ ABI. Pokud přidám do jazyka nějakou feature, tak si můžu dovolit upravit ABI pro potřebu té feature, pokud dřív neexistovala (přidání feature není ABI break). Navíc C++ standard nic jako calling convention nedefinuje, takže z pohledu C++ je platform ABI irelevantní.

    Takže problém není úklid na úrovni ABI, problém je ten, že destructive move má corner cases, které nikdo nebyl schopný vyřešit. Takže jsme se dostali do stavu, že tomu říkáme sice move, ale move to vůbec nemusí být, a každý kdo chce implementovat move, musí implementovat taky stav, kdy něco bylo moved... většinou se ta instance prostě vyresetuje do "default constructed" stavu, ale někdy to nejde a to je pak peklo. Navíc je to zbytečný overhead, který umí kompiler odstranit jen když je move constructor a destructor inline (nebo LTO, atd...).

    Ale nikdy bych neříkal nikdy. Destructive move je něco co lidi v C++ chcou, a nedají s tím pokoj, protože to je užitečná věc.