Это воспринимается как зло, потому что оно просто более сложное и вызывает больше проблем, чем обычно ожидают люди, особенно если базовые классы не являются чисто абстрактными (нет данных). Наследование алмазов можно решить с помощью виртуального наследования, где общая база разделяется. И компиляторы могут поймать вызовы подписи метода. Используемый хорошо, он может производить элегантные и сухие решения, которые в ином случае более сложны для реализации через интерфейс и композиции/делегации.
Один общий идиом MI в C++ предназначен для сложных конструкторов оболочек, где базовый конструктор должен быть сконструирован с нетривиальными объектами-членами, а так как базовые объекты должны быть сконструированы перед объектами-членами, трюк заключается в использовании MI (" base from member "idiom.), в противном случае вы должны использовать фабрику и другие шаги для выполнения такой конструкции, как Java (у Java нет MI для классов без интерфейса).
Не бойтесь его и используйте, если это уместно (хотя может потребоваться некоторая практика, чтобы найти хорошую посадку).
Это не проблема, если вам требуется D для двусмысленности. – 2013-01-24 15:27:39