Как реализовать конструктор перемещения для элемента без указателя большого размера?
На этом сайте есть пример простого класса с конструктором перемещения.
Как будет выглядеть конструктор перемещения аналогичного класса:
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)) { }