Yes, I think this is good, especially with C++11 (or 12?), lambda expressions and move-semantics. I love C++ for that fact that it gives the programmer complete control over the efficiency of this programs, and not depending on some "optimizing" compiler. In many cases, the programmer, given that he or she knows the complexity of his or her constructs. can develop an "optimized" solution.. whether that be time, or space.
Programmers should not delegate "optimization" to their compilers. That's what I hate about Haskell, and love about C++. C++ at least forces one to consider their logic, and not punting it off to the compiler. The compiler is just another program, written by Humans (TM), it is not infallible. Also, in many cases, I am of the belief that "optimizing" compilers are a fad.. and that we programmers should write our programs to a very specific semantic.
We don't rely on some "God" who optimizes our code for us... I'm sorry, but full-program analyzing compilers are a myth. Are you smarter than your compiler? Yeah, then let it don't do anything weird under your nose! We need complete control. But we also need abstraction (controlled).
Back to the main topic, I don't believe OO solves any of real human software development problems, at least no more than a functional or non-class procedural approach would.