Frage zu Vererbung
-
@Steffo
Nur mal so nebenbei... ist dir klar dass hierauto settings = static_cast<SettingsControllerMockup &>(SettingsControllerMockup::instance());
settings
eine Kopie ist?
-
@hustbaer sagte in Frage zu Vererbung:
@Steffo
Nur mal so nebenbei... ist dir klar dass hierauto settings = static_cast<SettingsControllerMockup &>(SettingsControllerMockup::instance());
settings
eine Kopie ist?Du bist echt meine Rettung! Wie viele Leute das übersehen haben? Ich hatte gedacht, eine Kopie sei nicht möglich, da ich das hier gemacht habe:
class SettingsController { public: // // No copies of a singleton are allowed! // SettingsController(SettingsCamera const&) = delete; void operator=(SettingsController const&) = delete; protected: SettingsController(); }; }
Aber das gilt wohl nicht für die abgeleitete Klasse?
Danke nochmals!!!
-
@Steffo sagte in Frage zu Vererbung:
SettingsController(SettingsCamera const&) = delete;
Wie hängt denn die SettingsCamera mit dem SettingsController zusammen?
Ich hätte jetztSettingsController(SettingsController const&) = delete;
erwartet.
-
@Steffo
Wenn die Basisklasse keinen Copy-Ctor hat, dann hat die abgeleitete per Default auch keinen -- es sei denn du definierst selbst einen in der abgeleiteten Klasse. Das selbe gilt für Member, also nicht kopierbare Member machen auch per Default jede Klasse die solche Member hat nicht-kopierbar.Nur wie @wob schon angedeutet hat: du hast nicht den Copy-Ctor gelöscht sondern einen Konvertierungs-Ctor der eine
SettingsCamera
nimmt und daraus einenSettingsController
bastelt. (Den du natürlich nicht hättest löschen müssen, weil so ein Ctor ja nicht implizit definiert würde.)
-
@Steffo sagte in Frage zu Vererbung:
Du bist echt meine Rettung!
Nein
Wie viele Leute das übersehen haben?
Das ist irrelevant, solange vorher illegale casts im Code stehen.
-
@manni66
Das ist irrelevant, solange vorher illegale casts im Code stehen.
Finde ich nicht. Das Problem hätte er nach dem Fixen eventuell falscher Casts genau so noch gehabt. Es mag nicht das wichtigste Problem sein, aber irrelevant finde ich es jetzt nicht gerade.
-
@wob sagte in Frage zu Vererbung:
@Steffo sagte in Frage zu Vererbung:
SettingsController(SettingsCamera const&) = delete;
Wie hängt denn die SettingsCamera mit dem SettingsController zusammen?
Ich hätte jetztSettingsController(SettingsController const&) = delete;
erwartet.Oh, das ist ein Copy & Paste Fehler von anderem Code.
-
@manni66 sagte in Frage zu Vererbung:
@Steffo sagte in Frage zu Vererbung:
Wie viele Leute das übersehen haben?
Das ist irrelevant, solange vorher illegale casts im Code stehen.
Das override funktioniert weiterhin nicht, das stimmt, aber ich kann nun die protected Member-Variablen setzen, die die Methode foo() zurückgibt. Das funktioniert tatsächlich. Gut ist das nicht, aber das ist nur für Unit-Tests gedacht und ich habe nicht vor das ganze Projekt in DI umzuschreiben. Insofern hat mir @hustbaer wirklich sehr geholfen!
-
@Steffo sagte in Frage zu Vererbung:
ber das ist nur für Unit-Tests gedacht
Unit Tetst mit einem Test, der das Programm ungültig macht - sehr sinnvoll...
-
Dieser Beitrag wurde gelöscht!
-
@Steffo sagte in Frage zu Vererbung:
Wie viele Leute das übersehen haben?
Das ist lustigerweise so ziemlich das einzige, was mir in dem Thread überhaupt aufgefallen ist (und das mit DI). Hab aber keine Ahnung, worums hier eigentlich geht, und wer was geschrieben hat, deswegen hab ich auch nichts gesagt.
-
@Mechanics sagte in Frage zu Vererbung:
@Steffo sagte in Frage zu Vererbung:
Wie viele Leute das übersehen haben?
Das ist lustigerweise so ziemlich das einzige, was mir in dem Thread überhaupt aufgefallen ist (und das mit DI). Hab aber keine Ahnung, worums hier eigentlich geht, und wer was geschrieben hat, deswegen hab ich auch nichts gesagt.
Und warum liegt hier eigentlich Stroh?