У меня есть класс А, определенный ниже:
class A
{
public:
A() = default;
explicit A(uint32_t a, uint32_t b)
{
std::cout << "construct" << std::endl;
}
A(const A& obj)
{
std::cout << "copy" << std::endl;
*this = obj;
}
A(const A&& obj)
{
std::cout << "move" << std::endl;
*this = obj;
}
A& operator=(const A& obj)
{
std::cout << "copy operator" << std::endl;
return *this;
}
A& operator=(const A&& obj)
{
std::cout << "move operator" << std::endl;
}
};
Я использую класс так:
std::vector<std::pair<A, bool>> v;
v.emplace_back(A(0, 1), true);
emplace_back имеет следующий вывод:
construct
move
copy operator
У меня вопрос, есть ли способ построить А пары на месте, не вызывая move и оператор копирования ?