Я написал простую программу для создания объектов внутри стандартных контейнеров библиотеки. Вот что я написал:
#include <vector>
#include <iostream>
class AB
{
public:
explicit AB(int n);
AB(const AB& other) = delete;
AB(AB&& other);
AB& operator=(const AB& other) = delete;
AB& operator=(AB&& other) = default;
private:
int i;
};
AB::AB(int n): i( n )
{
std::cout << "Object created." << std::endl;
};
AB::AB(AB&& other): i( std::move(other.i) )
{
std::cout << "Object moved." << std::endl;
};
int main()
{
std::vector< AB > v;
v.emplace_back(1);
v.emplace_back(2);
v.emplace_back(3);
};
Я скомпилировал его с g++ (версия 4.8.2). После выполнения вывода я получил:
Object created.
Object created.
Object moved.
Object created.
Object moved.
Object moved.
Но я ожидал чего-то вроде этого:
Object created.
Object created.
Object created.
Я думал, что все дело в том, чтобы избавиться от вызовов конструктора движения. Существуют ли какие-либо требования в классе AB, которые не выполняются?
Спасибо за вашу помощь.