Jest postrzegany jako zło, bo to po prostu bardziej skomplikowane i stwarza więcej problemów niż ludzie zwykle się spodziewać, zwłaszcza w przypadku klasy bazowe nie są czysto abstrakcyjne (brak danych użytkowników). Dziedziczenie diamentów można rozwiązać za pomocą dziedziczenia wirtualnego, w którym wspólna baza jest współużytkowana. Kompilatory mogą przechwytywać kolizje sygnatur metod. Dobrze wykorzystane, może produkować eleganckie i SUCHE rozwiązania, które w przeciwnym razie są bardziej szczegółowe do wdrożenia poprzez interfejs i kompozycje/delegacje.
Jeden wspólny idiom MI w C++ jest dla złożonych konstruktorów, w których bazowy contructor musi być skonstruowany z nietrywialnymi obiektami członkowskimi, a ponieważ obiekty bazowe muszą być skonstruowane przed obiektami członka, sztuczka polega na użyciu MI (" opiera się na "idiomie" członka.) W przeciwnym razie musisz użyć fabryki i wykonać więcej kroków, aby wykonać taką konstrukcję jak Java (Java nie ma MI dla klas nieinterfejsowych).
Nie bój się tego i używaj go w razie potrzeby (choć może to zająć trochę praktyki, aby wykryć dobre dopasowanie).
To nie jest problem, jeśli potrzebujesz D do dwuznaczności. –