Diamond of death



  • Schönen Tag zusammen,

    Ich befasse mich gerade etwas mit Mehrfachvererbung und ich meine zum Thema 'Diamond of death' mal gelesen zu haben, dass man den Klassen sagen kann, dass sie sich dieselbe Basisklasse teilen sollen. So muss nicht mehr gesagt werden, von welcher Basisklasse die Methode stammt und es wird im Speicher auch ohne zweite Kopie abgelegt.

    Ich werde versuchen, es in meiner Chronik irgendwie zu finden, aber es wäre super, wenn mir vielleicht jemand auf die Sprünge helfen könnte. 🙂

    Gruß

    Ich glaube, dass ich hier auf die Antwort gestoßen bin: Klick



  • Jup. Virtuelle Vererbung ist das Stichwort.



  • Aber virtuelle Vererbung ist nach Scott Meyers performancelastig...



  • Wobei ich zumindest bei meinen bisherigen Projekten festgestellt habe, das sich das Problem des "Diamond of Death" häufig nur in Projekten findet, wo Vererbungen zu häufig eingesetzt wird.

    Nichts gegen das Prinzip der Vererbung, aber es gibt Alternativen, die häufig übersehen werden (z.B. Komposition) und häufig auch eine wesentlich bessere Wartbarkeit/Erweiterbarkeit nach sich ziehen.



  • EOutOfResources_At_Work schrieb:

    Aber virtuelle Vererbung ist nach Scott Meyers performancelastig...

    Wo ich sie verwendet habe, wäre die Alternaive ein kleiner Strauß von ifs gewesen. Ich würde sagen, schon das Design ist performancelastig, wenn man virtuelle Vererbung einigermaßen sinnvoll einbauen kann.

    Das war aber nur ein experimentelles Projekt, wo ich mit Gewalt jedes if sparen wollte. Sonst brauche ich sie nicht.



  • Der DOD kommt quasi nie vor. Der ist nur eine Erfindung von Java-Programmierern, die MI nicht kapieren und ne Ausrede dagegen suchen.



  • 314159265358979 schrieb:

    Der DOD kommt quasi nie vor. Der ist nur eine Erfindung von Java-Programmierern, die MI nicht kapieren und ne Ausrede dagegen suchen.

    In der STD kommt er vor...



  • STD

    Wofür soll eigentlich STD stehen? Sexually transmitted disease?

    In der STD kommt er vor...

    Soweit ich weiß nur in der IOstream Bibliothek, die sowieso nicht ganz das gelbe vom Ei ist.



  • HansWurst2 schrieb:

    STD

    Wofür soll eigentlich STD stehen? Sexually transmitted disease?

    Abkürzung für Standart. Man muß STD schreiben, damit es nicht ausgesternchent wird.



  • volkard schrieb:

    HansWurst2 schrieb:

    STD

    Wofür soll eigentlich STD stehen? Sexually transmitted disease?

    Abkürzung für stan****. Man muß STD schreiben, damit es nicht ausgesternchent wird.

    Oder man schreibt es gleich korrekt "standard".



  • Och Gott, CStoll. Keine Punkte für deinen Detektor heute 🤡

    MfG SideWinder



  • SideWinder schrieb:

    Och Gott, CStoll. Keine Punkte für deinen Detektor heute 🤡

    Der Detektor ist leider ausgefallen - zusammen mit meiner Kristallkugel 😃



  • EOutOfResources schrieb:

    314159265358979 schrieb:

    Der DOD kommt quasi nie vor. Der ist nur eine Erfindung von Java-Programmierern, die MI nicht kapieren und ne Ausrede dagegen suchen.

    In der STD kommt er vor...

    Dort machts auch Sinn und erzeugt keine Probleme wie von Javanern prophezeit.



  • 314159265358979 schrieb:

    EOutOfResources schrieb:

    314159265358979 schrieb:

    Der DOD kommt quasi nie vor. Der ist nur eine Erfindung von Java-Programmierern, die MI nicht kapieren und ne Ausrede dagegen suchen.

    In der STD kommt er vor...

    Dort machts auch Sinn und erzeugt keine Probleme wie von Javanern prophezeit.

    Achwatt.
    Dann lies mal da:

    http://connect.microsoft.com/VisualStudio/feedback/details/98861/2005-crt-memory-leaks-std-basic-iostream-affects-std-stringstream-std-fstream-probably-others
    http://connect.microsoft.com/VisualStudio/feedback/details/518512/memory-leak-in-ostream-init
    http://us.generation-nt.com/answer/basic-ios-init-multiple-call-standard-conform-help-10015222.html?page=4

    usw.



  • Tritt komischerweise nur bei Microdoof auf - wieso wundert mich das jetzt nicht.

    Nein, "keine Probleme" war vielleicht etwas voreilig, aber aus logischer Sicht ergibts für mich Sinn. Für dich etwa nicht? Wie würdest du das machen? 🙂



  • Tritt komischerweise nur bei Microdoof auf - wieso wundert mich das jetzt nicht.

    Es wundert dich nicht, weil du doof bist. Sorry, aber das ist typisches dummes anti-MS gebashe.

    MS verwendet eine (auf MSVC angepasste) Version der Dinkumware.
    Hast du den 3. Link verfolgt/gelesen? Speziell das Kommentar von P.J. Plauger (Dinkumware)?

    314159265358979 schrieb:

    Wie würdest du das machen? 🙂

    Ich müsste mich mit dem Thema etwas genauer befassen um dazu mehr sagen zu können. Das ganze "Konstruktor der nix tut + init() Funktion die man aber nur 1x aufrufen darf + virtual inheritance" Konstrukt erscheint mir allerdings reichlich plem.



  • hustbaer schrieb:

    Tritt komischerweise nur bei Microdoof auf - wieso wundert mich das jetzt nicht.

    Es wundert dich nicht, weil du doof bist. Sorry, aber das ist typisches dummes anti-MS gebashe.

    Das ist jetzt falsch rübergekommen - das war eigentlich sarkastisch gemeint 🤡
    Nein, so genau hab ich mir das alles nicht angesehen, werde ich nun aber tun, während ich mir überlege, ob es Sinn macht, beim nächsten Contest was mit Quaternionen zu machen :p



  • EOutOfResources schrieb:

    314159265358979 schrieb:

    Der DOD kommt quasi nie vor. Der ist nur eine Erfindung von Java-Programmierern, die MI nicht kapieren und ne Ausrede dagegen suchen.

    In der STD kommt er vor...

    und total unnötig. Das Konzept von Streams in denen man 2 voneinander unabhängige Lese- und Schreibzeiger hat ist einfach für den Po.

    Ansonstne kommt der DOD nur bei schlechtem Bibliotheksdesign vor.

    Softwareplaner: "Oh, lass uns mal unser Hauptinterface von QObject ableiten"
    (3 Monate später): "Du willst deine Klasse auch von QGLWidget ableiten? ne, das geht nicht. DOD."



  • otze schrieb:

    Softwareplaner: "Oh, lass uns mal unser Hauptinterface von QObject ableiten"
    (3 Monate später): "Du willst deine Klasse auch von QGLWidget ableiten? ne, das geht nicht. DOD."

    😃



  • Achja, @314159265358979:
    Nachdem du selbst noch nix entwickelt hast, kannst du zwar die Beobachtung anstellen dass der DOD selten vorkommt, aber nicht sagen warum.
    Deine Vermutung scheint zu sein, dass es so selten Fälle gibt, wo der DOD überhaupt vorkommen könnte.
    Ich würde eher behaupten dass man den DOD in fertiger Software so selten sieht, weil man sich damit einfach diverse Probleme/Nachteile einhandelt.


Anmelden zum Antworten