如何为大型非指针成员实现移动构造函数?

时间:2015-02-21 22:14:27

标签: c++ c++11 move-semantics move-constructor

this website上有一个带有移动构造函数的简单类的例子。

如何移动类似类的构造函数:

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 个答案:

答案 0 :(得分:3)

符合C ++ 11编译器will automatically create a move constructor for youVisual Studio 2013 does not)。默认移动构造函数将执行成员移动,std::vector实现移动语义,因此它应该执行您想要的操作。

但是,是的,如果由于某种原因你需要自己定义移动构造函数,看起来是正确的。虽然最好使用构造函数初始化列表并将其声明为noexcept

MemoryPage::MemoryPage(MemoryPage &&other) noexcept : buff(std::move(other.buff)) { }