Как правильно переместить вектор (или что-то еще) извне в класс? - PullRequest
0 голосов
/ 19 апреля 2020

struct Something { ... };

class MyClass
{
public:
    MyClass(std::vector<Something>&& vec)
    {
        myVec = vec;
    }
private:
    std::vector<Something> myVec;
};

void main()
{
    ...
    MyClass instance(std::move(someVector));
}

или

class MyClass
{
public:
    MyClass(std::vector<Something> vec)
    {
        myVec = std::move(vec);
    }
private:
    std::vector<Something> myVec;
};

void main()
{
    ...
    MyClass instance(someVector);
}

они оба не правы? Второй, конечно, выглядит так. Должен ли я также беспокоиться о том, чтобы после переезда установить "ve c" в некоторые "действительные данные"? Извините, я новичок как в C ++, так и в семантике перемещения, спасибо за ваше время:)

1 Ответ

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

Оба не правы. Первый делает копию (в myVec = vec;), как и второй (в std::vector<Something> vec).

Вы также должны создать MyClass со ссылкой на значение: MyClass instance(std::move(someVector)).

Вот как это должно быть сделано:

class MyClass
{
public:
    MyClass(std::vector<Something>&& vec) : myVec(std::move(vec))
    {
    }
private:
    std::vector<Something> myVec;
};

void main()
{
    ...
    MyClass instance(std::move(someVector));
}

Деталь : myVec(std::move(vec)) называется списком инициализатора элемента . Более эффективно повторное назначение членов в теле конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...