…Bad performance."
Inheritance, protected variables, single-responsibility, RAII, all feel neat to implement but haven't necessarily lead me to better code, or more extendable code. The Actor-Component paradigm might make sense in the context of an easy-to-use engine like Unity or Unreal, but it makes little sense elsewhere. The often-recommended many layers of abstraction usually lead you to leak complexity.
(e.g. "I'll make an actor for that" feels like a straightforward solution but is in fact a new class, five layers deep in the inheritance hierarchy, with 30 variables it will never use. But "hey, at least its update function gets called automatically…")
I now take better care to profile my projects, and let that – not SOLID principles – guide my architectural decisions.
Above all, I found that SOLID principles as a bible can lead you to solve problems you haven't faced yet. You feel like you are being diligent, but in fact you are trapping your future self in a solution that might not be adapted to the problems he actually faces. I now prefer solving only the problems I see, at the risk of deleting less code if it finds itself no longer applicable to a larger task.