Понимание `std :: move` в конструкторе - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь понять использование std::move. Не могли бы вы сказать мне, если мои рассуждения верны? Я рассматриваю следующий класс:

class T{
  public:
    T(string s){
        str = move(s);
    }
    string str;
};

Теперь давайте рассмотрим два способа использования этого класса.

  1. T t("abc");

Вот что происходит эта строка "abc" сначала создается, а затем ее ресурс перемещается в t.str. Поэтому строка "abc" никогда не копируется.

string s = "abc"; T t(s);

Здесь сначала создается строка s. Затем копия s передается по значению в конструктор T(). Наконец, ресурс копии s перемещен в t.str. Всего "abc" копируется один раз.

Это правда?

1 Ответ

1 голос
/ 19 апреля 2020

В первом случае s инициализируется из массива char "abc", а затем ресурс s перемещается в t.str. Затем s уничтожается.

Во втором случае первый s (почему люди, задающие эти вопросы, всегда используют одно и то же имя переменной для двух разных вещей?) Инициализируется из массива char "abc" , Затем функциональный параметр s инициализируется из первого s путем копирования, а затем функциональному параметру s его ресурс перемещается в t.str, а затем функциональный параметр s уничтожается.

...