Ausnahme- und Kopierkonstruktor: C ++

8

Bezug nehmend auf Ссылка

Ich laufe unter Code:

%Vor%

Die Ausgabe, die ich bekam:

%Vor%

Ich verstehe, dass der Compiler den Code möglicherweise durch unnötiges Kopieren optimiert hat, was er hier nicht tut.

Aber was ich fragen möchte, wie wird two calls to the copy constructor gemacht?

catch(C c) - Da wir den Wert übergeben, wird hier der Kopierkonstruktor aufgerufen.

Aber bei throw c Wie wird der Kopierkonstruktor aufgerufen? Kann jemand erklären?

    
Gaurav K 08.05.2013, 04:58
quelle

1 Antwort

11
%Vor%

Erstellt ein temporäres Objekt, und dieses temporäre Objekt wird geworfen. Die Erstellung des temporären kann durch Kopieren / Verschieben-Konstruktor erfolgen. Und ja, diese Kopie / Bewegung kann weggelassen werden.

Referenzen:
C ++ 11 15.1 Eine Ausnahme auslösen

§3:

  

Ein throw-Ausdruck initialisiert ein temporäres Objekt namens Exception-Objekt , dessen Typ bestimmt wird, indem alle cv-Qualifikationsmerkmale auf oberster Ebene vom statischen Typ des Operanden throw und adjusting entfernt werden der Typ .........

§5:

  

Wenn das geworfene Objekt ein Klassenobjekt ist, müssen der Kopier- / Verschiebungskonstruktor und der Destruktor zugänglich sein, selbst wenn die Kopier- / Verschiebeoperation weggelassen wird (12.8).

    
Alok Save 08.05.2013, 05:03
quelle

Tags und Links