For microcontrollers memory is at a premium. Though correctness is valued and C++ helps with correctness, if it doesn't fit, it doesn't work. Even C can produce bloated code, but there's less waste when you try to reduce memory consumption by sharing as much as you can. That is, forget protection, forget object orientation... do it right the manual way, and make it small.
If you're dealing with embedded computers, then there's a lot more memory to work with, and hence c++ may be a proper solution.
(I've never tried writing a C++ program for AVR with g++, it's possible that it would work perfectly fine, though...)