Frage : Vollkommener Zuweisungsoperator 1

Hallo, sollte

How ich vollkommenen Zuweisungsoperator für diese Kategorie bilden?

class TAAA : allgemeines TSuperAAA
{
TBBB* b1_;
   TBBB* b2_;
};
TBBB ist monomorphic und b1_, b2_ Punkt something.

Antwort : Vollkommener Zuweisungsoperator 1

>>, besonders wenn Infinity08: schrieb, dass Garantie nicht im realen System benötigt (wenn ich verstand).

Nicht bedeutete ich nicht, dass eine Garantie nicht erforderlich ist. Was ich in Erwiderung auf Pfosten des Ambientes sagte, war, dass ich es vorziehe, Fehlerbeschaffenheiten als seine Annäherung anders als zu beschäftigen.

Es gibt zwei Ansätze hier (ich addiert meine eigenen persönlichen Gedanken auch):

(a) Versuchen, den Zuweisungsoperator zu schreiben, um den Gegenstand in einem gültigen Zustand für jedes mögliche Drehbuch zu lassen. Dieses ist oder extrem stark am allerwenigsten im Allgemeinen unmöglich. Es gibt zu viele betroffenen Variablen und zu vieles mögliches Störungsdrehbuch. Additionaly, diese Art der Annäherung hinzufügt Beschränkungen, was der Code tun kann, der nicht in vielen Fällen wünschenswert ist.

(b) Die addierte Kompliziertheit vermeiden, die mit der vorhergehenden Annäherung kommt, und die Verantwortlichkeit zum benennenden Code anstatt aufschieben. Der Mechanismus von Ausnahmen entsprochen tadellos für den. Außerdem ist es normalerweise der benennende Code, der Bestes kennt, wie man eine Störung (irgendeine durch das Versuchen, es zu regeln, es, würdevoll auszufallen, etc. zu ignorieren) beschäftigt, damit ein anderer Grund, diese Annäherung zu bevorzugen ist.

Die zweite Annäherung ist, was ich für den allgemeinen Fall, weil er flexibler ist, und einfacher einzuführen empfehle, und wenn es richtig getan, Sie nichts in Bezug auf Codesicherheit verlieren.
Die erste Annäherung ist in bestimmten spezifischen Fällen nützlich, aber Sie erhalten schnell in den Kompliziertheiten begraben, wenn Sie versuchen, sie überall zu verwenden heh.



>> Meine Inspiration für die Herstellung dieses Pfostens ist

Es ist ein netter Artikel, und es umfaßt in der Tat viele der Gefahren mit Zuweisungsoperatoren.


>> I und wunderte, was korrekte Antwort für das ist.

Sie merken, dass der Artikel mit einer der korrekten Weisen, einem Zuweisungsoperator zu nähern beginnt. Der einzige Unterschied mit dem Code, den ich früh, bin bekannt gab, dass ihr Zuweisungsoperator richtig nach sich aufräumt, falls die Speicherallozierung ausfällt.

Das ist gut nicht völlig notwendig, aber. Der Verbrennungsofen der Kategorien entworfen, um einen Gegenstand aufzuräumen, also es vorziehe ich ch, diese Verantwortlichkeit dort zu lassen, anstatt, sie heraus zu verbreiten ganz über den Methoden der Kategorien.

Gegen das Ende des Artikels, besprochen verschiedene Ansätze auch.


Wieder hinausgehend über meinen früheren Code, beschmutzte ich einen Fehler zwar. Die „Löschung b1_; “ Linie sollte von gefolgt worden sein „b1_ = 0; “ Linie (ähnlich für b2_). Scheine ich schrieb ein Spitze zu schnelles heh. So wird es:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
TAAA& TAAA:: operator= (const TAAA& taaa) {
    TSuperAAA:: operator= (taaa);                   //-Anruf der Zuweisungsoperator für die niedrige Kategorie
    wenn (dieses! = &taaa) {                          //-Überprüfung auf Selbstanweisung
        Löschung b1_;
        b1_ = 0;
        b1_ = neues TBBB (taaa.b1_);
        Löschung b2_;
        b2_ = 0;
        b2_ = neues TBBB (taaa.b2_);
    }
    Rückhol*this;
}
Weitere Lösungen  
 
programming4us programming4us