Znikające wywołanie konstruktora kopiującego

0

Załóżmy że mamy jakąś klasę Foo z konstruktorami domyślnymi i jednym konstruktorem przyjmującym powiedzmy stringa;

A a = A("a");

Pierw jest wywoływany konstruktor przyjmujący stringa a potem konstruktor kopiujący;

A a = A();

Tutaj natomiast jest wywoływany konstruktor domyślny, brak wywołania konstruktora kopiującego.

Dlaczego raz konstruktor kopiujący jest wywoływany a raz nie?

0

Bo kompilator wywala niepotrzebne użycie konstruktora kopiującego i uważa ten zapis za równoważny z A a(). Dziwię się że w 1. przypadku tak nie zrobił. Może zrobi tak na wyższych poziomach optymalizacji.

0

Sprawdziłem pod VS 2005/2010 z /Od /O2 i /Ox i ciągle to samo bez względu na optymalizacje ...

A a = A(5); 

Zadziała tak jak 1), czyli bez konstruktora kopiującego...

Wygląda na to że konstruktor kopiujący pod VS jest wywoływany wtedy gdy parametry nie są typów wbudowanych czy tam prostych czy jak to tam się nazywa pod ...

Pod gcc w tych 3 przykładach ani razu nie jest wywoływany konstruktor kopiujący ...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.