Dlaczego nie idzie konstruktor kopiujący?

0

Hej, spójrzcie na ten kod: https://wandbox.org/permlink/3LApDJ51MA7seW5i

Wg mnie w funkcji CopyArray na końcu powinien pójść konstruktor kopiujący. Nic takiego się nie dzieje. Dlaczego? Co więcej, w VisualStudio destruktor idzie wcześniej, niż wyjście z funkcji CopyArray.

1

Tu: https://www.learncpp.com/ są te rzeczy dość dobrze, imo, zreferowane, rzuć okiem ;)

5

@Juhas:

Można to jakoś... przyblokować?

Możesz flagą kompilatora -fno-elide-constructors, ale wtedy w pierwszej kolejności zostanie użyty move ctor jeśli będzie taka możliwość, jeśli go usuniesz ze swojego kodu to uda Ci się wtedy wywołać kopujący konstruktor.

1

@Juhas: przy czym poleganie na liczbie wywołań konstruktorów kopiujących to jest generalnie zła praktyka, bo to copy elision to jest optymalizacja na poziomie specyfikacji języka a nie kompilatora. Albo jeszcze inaczej: po użyciu tego switcha to nie będzie już przenośny C++. Do czego Ci to potrzebne dokładnie?

1

A ja się zastanawiam, czemu tak to przekombinowałeś?
https://wandbox.org/permlink/Hb9MCw02Yeor9YjU

1 użytkowników online, w tym zalogowanych: 0, gości: 1