Es wird als böse empfunden, weil es nur komplexer ist und mehr Probleme verursacht, als die Leute normalerweise erwarten, insbesondere wenn die Basisklassen nicht rein abstrakt sind (keine Datenmitglieder). Die Diamantvererbung kann mithilfe der virtuellen Vererbung gelöst werden, wobei eine gemeinsame Basis gemeinsam genutzt wird. Und Compiler können Methodensignaturkollisionen abfangen. Gut verwendet, kann es elegante und DRY-Lösungen erzeugen, die ansonsten über Schnittstelle und Kompositionen/Delegationen ausführlicher zu implementieren sind. Ein gemeinsames MI-Idiom in C++ ist für komplexe Wrapper-Konstruktoren, bei denen der Basiskonstruktor mit nicht-trivialen Member-Objekten konstruiert werden muss, und da Basisobjekte vor Member-Objekten konstruiert werden müssen, besteht der Trick darin, MI zu verwenden. Basis von Member "idiom.", ansonsten muss man eine Factory verwenden und weitere Schritte, um die Konstruktion zu machen, wie Java es tut (Java hat keine MI für Nicht-Interface-Klassen).
Haben Sie keine Angst davor und verwenden Sie es, wenn es angemessen ist (obwohl es einige Übung brauchen könnte, um eine gute Passform zu finden).
Es ist kein Problem, wenn Sie möchten, dass D ambiguiert. –