btw - I think we'd get similar performance improvement if we were using move semantics of C++11