I wrote a simple program to play around with in-place creation of objects inside standard library containers. This is what I wrote:
#include
#
The problem is that your vector is being resized as you add more elements, resulting in extra moves. If you reserve enough capacity at the start, you get the expected result:
std::vector< AB > v;
v.reserve(3);
v.emplace_back(1);
v.emplace_back(2);
v.emplace_back(3);
gives
Object created.
Object created.
Object created.
On gcc 4.8.2. Note that you can track the vector's growth in your original code by looking at v.capacity()
.