у меня map
класс:
class map final
{
public:
explicit map(const size_t capacity = 4);
map(const map ©) = delete;
~map();
map &operator=(const map&) = delete;
void add(std::string str);
private:
class impl;
std::unique_ptr<impl> m_impl;
};
Метод void add(std::string str);
по умолчанию вызывает конструктор копирования, как я получил. Поэтому я могу использовать map.add(std::move(str));
для вызова конструктора перемещения. Я написал функцию main
, чтобы показать, как я ее понимаю:
int main()
{
map m;
std::string str = "test";
m.add(str); // Copy
m.add("test"); // ?
m.add(std::move(str)); // Move
m.add(std::move("test")); // Move
return 0;
}
В комментарии я написал ожидаемую версию конструктора ... Правильно ли это? А какой конструктор будет вызываться в m.add("test");
?
Как мне изменить сигнатуру моего метода, чтобы вызвать конструктор копирования для объекта, который не поддерживает перемещение, и конструктор перемещения для других? Включая const
объекты .
P.S. Я изучаю только C ++ и просто пытаюсь понять, как он работает.
P.P.S. В add
метод std::move()
не вызывается.