std :: Zeichenkette x (x);

8
%Vor%

Dies stürzt auf meinem Compiler sehr schlecht ab. Bedeutet das, dass ich für this != &that in meinen eigenen Kopierkonstruktoren testen sollte, oder kann ich annehmen, dass kein Client jemals so dumm sein wird?

    
fredoverflow 27.03.2010, 11:37
quelle

3 Antworten

6

Etwas mit sich selbst zu initialisieren ist ein undefiniertes Verhalten, was möglicherweise sogar bedeuten kann, dass es nach dem Aufruf sogar nicht mehr erkannt werden kann. Angenommen, der Compiler erkennt es und aus Trotz erzeugt Assembly für nasale Dämonen, kein Aufruf an Ihren Kopierkonstruktor überhaupt?

In der Praxis kann man davon ausgehen, dass der Client nicht so dumm ist, und wenn sie es sind, ist es ihre Aufgabe, sie zu debuggen und herauszufinden.

    
UncleBens 27.03.2010, 11:49
quelle
9

Sie sollten nicht gegen Code testen, der schlecht abstürzt. Siehe Nullreferenzen . Es sagt

  

"Genauso wie Sie davon ausgehen müssen, dass ein Nicht-Null-Zeiger gültig ist, müssen Sie davon ausgehen, dass eine Referenz gültig ist. Sie müssen Vertrauen in Ihre Mitprogrammierer haben."

Ich möchte ergänzen

  

... Sie müssen davon ausgehen, dass die Quelle einer Kopie gültig ist.

Wenn Sie Ihren Fall "reparieren", was tun Sie für diesen Fall?

%Vor%     
Johannes Schaub - litb 27.03.2010 11:41
quelle
2

Dieser Code stimmt nicht mit dem Standard überein und es macht keinen Sinn, ihn zu überprüfen, und das Beste, was passieren kann, ist ein schneller Fehler, so dass der Benutzer seinen Code korrigieren kann.

    
quelle

Tags und Links