Was (nicht) zu tun in einem Konstruktor

Möchte ich Sie bitten, für Ihre besten Praktiken bezüglich der Konstruktoren in C++. Ich bin nicht ganz sicher, was ich tun sollte in einem Konstruktor und was nicht.

Soll ich verwenden Sie nur für Attribut-Initialisierungen, den Aufruf von parent Konstruktoren etc.?
Oder könnte ich sogar mehr komplexe Funktionen in Ihnen, wie das Lesen und Parsen der Konfiguration von Daten, einrichten von externen Bibliotheken ein.s.o.

Oder sollte ich schreiben, die spezielle Funktionen für diese? Bzw. init() /cleanup()?

Was sind die PRO 's und CON' s hier?

Dachte ich noch, dass ich zum Beispiel kann loszuwerden shared Pointer bei der Verwendung init() und cleanup(). Ich kann die Objekte auf dem Stapel, als Attribute der Klasse und initialisieren Sie es später es ist zwar bereits gebaut.

Wenn ich mit in den Konstruktor brauche ich zum instanziieren während der Laufzeit. Dann brauche ich einen Zeiger.

Ich weiß wirklich nicht, wie zu entscheiden ist.

Vielleicht können Sie mir helfen?

  • gotw.ca/gotw/066.htm
  • Ich denke, es ist eine schlechte Idee, um Dinge hinzufügen, wie init() und cleanup() zu den Klassen. Das schreit nach Fehlern. Sie können nicht sicher sein, ob Sie eine Klasse init()ed. Man könnte hinzufügen, Funktionen zu prüfen, aber das macht es noch komplizierter.
  • Sorry, aber ich weiß nicht Recht bekommen es. Der Artikel, den Sie verlinkt Gespräche über Ausnahmen, soweit ich das verstanden habe.
  • Ja tut es, aber verpassen Sie nicht den wichtigsten Punkt. Bereit sein, zu tun mit Konstruktor Ausfälle, die immer wartet, um zu geschehen.
  • Tatsächlich ist es oft eine gute Idee, init() und cleanup () - Funktionen, aber Vorsicht, wenn init() virtuell ist es nicht Arbeit, die Sie anrufen aus einem Konstruktor. Wenn Sie factory-Objekte, obwohl Sie zwei-Stufen-Konstruktion, erstellen der Klasse, dann ruft init() auf. Klassen, die wrap-thread-Funktionen werden oft auf diese Weise getan
  • Was meinst du mit "Attribute der Klasse"? Das ist kein C++ - Konzept, es sei denn, Sie verwenden einen nicht standardmäßigen Namen für etwas.
  • Clark Kant: In der Tat, der Breite Konsens ist, dass die FQA ist eine Menge bullsht und wütend Schreien, gemischt mit ein paar Valide Kritikpunkte, sind komplett ausgeblasen Proportionen. Nicht eine gute C++ - Ressourcen. Insbesondere, nicht eine, die bietet *keine Lösungen oder Konstruktive Kritik. Zurück in den Tagen, die Sie verwendet, um zu bezeichnen das als "FAIL".
  • manchmal müssen Sie neu initialisieren. (esp. auf embedded-Systemen)
  • S: ja, Das ist richtig, aber dies sollte nicht der Standard für OO-Entwicklung. Dies führt zu ernsthaften Schwierigkeiten, wenn nicht sorgfältig verwendet.

InformationsquelleAutor tyrondis | 2010-10-11
Schreibe einen Kommentar