2016-04-08 15 views
0

Könnte mir jemand sagen, warum in diesem Fall der Konstruktor und der Destruktor vom Programm verwendet wird?Reihenfolge des Konstruktors und des Kopierkonstruktors

#include <iostream> 

#include <iomanip> 

using namespace std; 

class Object 
{ 
public: 
     Object(){} 
     Object(const Object &kk) {cout<<"kk"<<endl;} 
     bool operator==(Object c) 
     { 
       cout<<"o=="<<endl; return false; 
     } 
     ~Object() 
     { 
       cout<<"des"<<endl; 
     } 

}; 

int main() 
{ 
     Object o1,o2; 
     bool result; 
     result = (o1==o2); 
} 

Das Ergebnis ist:

kk 
o== 
des 

Vielen Dank im Voraus für die Antwort.

+0

Sie sollten drei 'des' haben. Ist das die gesamte Ausgabe? –

+0

http://coliru.stacked-crooked.com/a/cda48c84215619dc –

+0

Ja, es gibt 3 des. Habe gerade dieses 1. Lightness Races in Orbit geschrieben, hat meine Frage bereits beantwortet und ich habe mich selbst daran erinnert, warum es so ist. – FilOle

Antwort

2

Weil Ihr operator== sein Argument nach Wert nimmt.

Durch Wert genommen bedeutet eine Kopie.

Nehmen Sie stattdessen eine Const-Referenz, wie Sie es für Ihren Kopierkonstruktor getan haben.

+0

Tricky. Vielen Dank. – FilOle

Verwandte Themen