Как реализовать конструктор перемещения для элемента без указателя большого размера?

На этом сайте есть пример простого класса с конструктором перемещения.

Как будет выглядеть конструктор перемещения аналогичного класса:

class MemoryPage
{
        std::vector<char> buff;

        public:
        explicit MemoryPage(int sz=512)
        {
                for(size_t i=0;i<sz;i++)
                        buff.push_back(i);
        }

};

будет ли это:

MemoryPage::MemoryPage(MemoryPage &&other)
{
        this->buff = std::move(other.buff);
}

?

1 ответ

Решение

Соответствующий компилятор C++11 автоматически создаст для вас конструктор перемещения ( Visual Studio 2013 этого не делает). Конструктор перемещения по умолчанию будет выполнять перемещение по элементам и std::vector реализует семантику перемещения, поэтому она должна делать то, что вы хотите.

Но да, если по какой-то причине вам нужно определить конструктор перемещения самостоятельно, который выглядит правильно. Хотя предпочтительнее использовать список инициализации конструктора и объявить его noexcept:

MemoryPage::MemoryPage(MemoryPage &&other) noexcept : buff(std::move(other.buff)) { }
Другие вопросы по тегам