Leksykon IT › Programowanie › Elizja kopii

Elizja kopii

Programowanie Svenska → Zaktualizowano: 2026-10-06

Kompilator całkowicie pomija kopiowanie lub przeniesienie i konstruuje obiekt od razu w miejscu docelowym. Od C++17 najważniejszy przypadek to wymóg, nie optymalizacja.

Zwracanie tymczasowego obiektu — return T{...}; — od C++17 w ogóle nie może wiązać się z kopiowaniem: obiekt jest inicjalizowany bezpośrednio w pamięci wywołującego. Reguła jest sformułowana tak, że dotyczy nawet typów, których nie można ani kopiować, ani przenosić, co pozwala fabryce zwrócić np. std::mutex. Wariant z nazwaną zmienną lokalną, NRVO, pozostaje opcjonalny, ale robi go każdy rozsądny kompilator. Typowa pułapka to pisanie return std::move(x); w przekonaniu, że pomaga — działa odwrotnie: wyrażenie nie jest już zwykłą nazwą, NRVO zostaje wyłączone i dostajemy gwarantowane przeniesienie tam, gdzie nie trzeba było robić nic.

← Wróć do leksykonu