Warum hat C ++ auto_ptr zwei Kopierkonstruktoren und zwei Zuweisungsoperatoren, aber einen Standardkonstruktor?

7

Warum braucht es zwei Formen? Danke

%Vor%     
Percy Flarge 29.11.2010, 19:08
quelle

4 Antworten

7

Es gibt einen Kopierkonstruktor - den nicht-templateten.

Der Vorlagenkonstruktor und der Zuweisungsoperator erlauben die Zuweisung von Zeigertypen, für die ein implizites existiert:

%Vor%

Ohne die Template-Versionen würde (*) nicht funktionieren, da der Compiler auto_ptr<A> als völlig anderen Typ behandelt als auto_ptr<B> .

    
peterchen 29.11.2010 19:16
quelle
6

Weil Kopierkonstruktoren keine Vorlagen sein können. Wenn sie nur die Template-Version hätten, würde der Compiler einen erzeugen, der nicht korrekt funktionieren würde.

Das gleiche gilt für die Zuweisung op ... denke ich.

    
Crazy Eddie 29.11.2010 19:12
quelle
4
  

Warum hat C ++ auto_ptr zwei Kopierkonstruktoren und zwei Zuweisungsoperatoren, aber einen Standardkonstruktor?

Tut es nicht.

Es hat einen Standardkonstruktor (einen Konstruktor, der 0 Argumente akzeptiert)

%Vor%

Es gibt einen Kopierkonstruktor (einen Konstruktor, der eine Kopie von einem Objekt desselben Typs erstellt)

%Vor%

Es gibt einen Zuweisungsoperator, mit dem Objekte des gleichen Typs zugewiesen werden können.

%Vor%

Es hat einen schicken Vorlagenkonstruktor, der auto_ptr anderer Typen verwendet (das ist kein Kopierkonstruktor, es ist nur ein normaler Konstruktor (obwohl es eine Templatestruktur ist)).

%Vor%

Es hat einen anderen Zuweisungsoperator, der verschiedene Typen von Auto-Pointer verwendet (also ja, das ist ein anderer Zuweisungsoperator, aber es ist kein Zuweisungsoperator (sondern ein Konvertierungszuweisungsoperator), da die rhs einen anderen Typ hat).

%Vor%     
Martin York 29.11.2010 20:13
quelle
3

Der Grund für die nicht vorlagengestützten Versionen besteht darin, auto_ptr s dem gleichen Typ zuzuweisen, der zugewiesen / konstruiert wird. Die Vorlagenversionen ermöglichen die Konstruktion / Zuweisung von verwandten, aber nicht identischen Zeigertypen.

%Vor%     
Eclipse 29.11.2010 19:13
quelle

Tags und Links