Názor ke článku RVO pro korutiny (C++20) od Ondřej Novák - RVO určitě potřebuješ, pokud static T foo() je...

  • 1. 4. 2024 13:40

    Ondřej Novák

    RVO určitě potřebuješ, pokud static T foo() je použit jako konstruktor... Je to alternativní způsob konstrukce objektu, zejména oblíbená lidmi, kteří umí i v Rustu (jo trochu si utahuju).

    Ale primárně to beru tak, že prostě vrácením objektu chci udělat jeho "přesun" z kontextu do kontextu. A pokud se to podaří bez fyzického přesunu, je to optimalizace.

    Tuhle optimalizaci používám právě u coro::future, kdy je třeba získat pointer na tenhle objekt před tím, než je vrácen volajícímu. A potřebuju zajistit, že ten pointer platí i po návratu z té funkce. Proto má zakázaný kopírování a přesun.

    Pozor na to, že reference je jiný pointer, takže i u reference můžeš vrátit něco, co referuje něco kde nic není. Na mechanismus prodlužování lifetime referencí bych nespoléhal, ne každý ty pravidla zná