Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

11

08.12.2014, 23:17

Beides hat Vor- und Nachteile.
Mit dem Ctor kannst du keine Fehlercodes zurückgeben, du kannst den Zeitpunkt des Aufrufs nicht so leicht selber bestimmen und im Falle von Arrays kannst du dem Konstruktor keine Parameter übergeben. Der Aufruf von virtuellen Methoden ist auch problematisch.
Initmethoden haben den Nachteil, dass es eine gewisse Redundanz zum Ctor gibt und dadurch unnötig viele Zustände entstehen. Zudem muss man sie manuell aufrufen.

Das ist einer der Schwachpunkte von C++. C ist da eleganter und konsequenter.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

12

08.12.2014, 23:36

Zitat von »Helmut«

du kannst den Zeitpunkt des Aufrufs nicht so leicht selber bestimmen und im Falle von Arrays kannst du dem Konstruktor keine Parameter übergeben.

Dem muss ich leider zustimmen!

C++ ist da sehr schwach. Es gibt aber Möglichkeiten da selbst noch ein wenig nachzuhelfen.
Zum Beispiel mit einem Container wie "optional". Wurde leider aus dem C++14 Standard gestrichen, aber sollte es in Boost geben bzw. kann man selbst schreiben.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

09.12.2014, 05:56

Generell gibt es keinen Grund eine init() Methode zu verwenden; wenn man meint, eine zu brauchen, ist das im Allgemeinen als Anzeichen davon zu werten, dass man gerade etwas falsch macht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

09.12.2014, 06:35

Dem würde ich ebenfalls zustimmen. Es mag sehr seltene Fälle geben (wie den von mir beschriebenen, der allerdings ebenfalls *kein* init erfordert), dennoch ist ein Init fehlerhaftes Design und sollte der Konstruktor kein vollständig initialisiertes Objekt erzeugen, ist da eindeutig was falsch.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

09.12.2014, 07:20

Hier muss unterschieden werden zwischen "Das Objekt wird initialisiert", was immer im Konstruktor passieren sollte, damit immer ein gültiges und voll funktionsfähiges Objekt vorliegt und "Es werden nachträglich noch andere Eigenschaften für ein gültiges Objekt gesetzt". Die beiden Dinge schließen sich nicht gegenseitig aus. Dein XML-Beispiel ist eher letzteres. Auch ohne den Aufruf der Setter für irgendwelche Member sollten diese Member immer über einen Konstruktor mit korrekten Werten initialisiert werden. Und ich wette, dass sie das auch werden, da Du scheinbar über Java redest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

16

09.12.2014, 09:30

@BlueCobold: Wenn ich solch zyklische Abhängigkeiten hätte, würde ich mir zuerst ansehen ob ich da nicht ein Objekt oder beide Objekte weiter aufteilen müsste. Dann erledigen sich diese Zyklen manchmal von selbst. Das würde ich einer Init-Methode definitiv vorziehen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

09.12.2014, 11:01

Das muss kein Zyklus in den reinen Abhängigkeiten sein - Interfaces machen es möglich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige