Odpověď na názor

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

  • 6. 7. 2025 17:19

    Ondřej Novák

    K tomu pár věcí, kde vidím problémy.

    1) C++ před C++11 prováděl destrukci caller. Proto bylo move navrženo tak jak bylo, o tom je článek. Nešlo to změnit. A je obtížné to změnit i nyní.

    -asi by šlo změnit ABI a označovat funkce nějakým flagem, aby se to při linkování nesmíchalo, ale kdyby to bylo jednoduchý, tak už to tam je.

    2) Je jedno, jak se argumenty předávají, pointer můžu mít jak v zásobníku tak v registru. Záleží, v jakém kontextu se zavolá destruktor. Pokud v kontextu callee, pak by destructive move bylo standardní součástí C++. Protože to ale dělá caller, tak bez znalosti toho, co s obsahem udělala callee nemůže rozhodnout a musí si nějak poznačit, zda se obsah v callee přesunul/destruoval nebo ne. A než zavádět nějaký rt flagy, zůstalo to označení na programátorovi