Uczę się teraz lekarzy i mam kilka pytań. Na tych liniach:Tworzenie obiektów C++ i konstruktor
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
pierwszej części: tylko 1 konstruktora nazywa (Foo) i obj
jest inicjowany. Tak, tworzenie 1 obiektu.
Druga część: tworzenie tymczasowego obiektu obj2
, wywołanie dla niego domyślnego ctor. W następnych wierszach tworzymy kolejną kopię Foo
i przekazujemy jej kopię do operator=()
. Czy to prawda? Tak więc, 3 lokalne tymczasowe obiekty, 2 wywołania konstruktorów.
Trzecia część: utwórz 1 obiekt Foo
i przekaż jego kopię do operator=()
. Tak więc, 2 obiekty temperatury i 1 wywołanie ctor.
Czy rozumiem to poprawnie? A jeśli to prawda, czy kompilator (na przykład ostatni gcc) zoptymalizuje je w typowych przypadkach?
'operator =()' zwykle otrzymuje swój argument przez odwołanie, więc nie ma kopii podczas wywoływania go. – rodrigo
Obiekt obj3 jest faktycznie tworzony przy użyciu operatora kopiowania, który nie przypisuje operatora. –