如何为大型非指针成员实现移动构造函数?
How to implement move constructor for large size non-pointer member?
this website 上有一个带有移动构造函数的简单 class 示例。
类似 class 的移动构造函数看起来如何:
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);
}
?
一个符合 C++11 的编译器will automatically create a move constructor for you (Visual Studio 2013 does not)。默认的移动构造函数将执行成员智能移动并且 std::vector
实现移动语义,因此它应该做你想做的。
但是是的,如果出于某种原因您确实需要自己定义看起来正确的移动构造函数。虽然最好使用构造函数初始化列表并声明它 noexcept:
MemoryPage::MemoryPage(MemoryPage &&other) noexcept : buff(std::move(other.buff)) { }
this website 上有一个带有移动构造函数的简单 class 示例。
类似 class 的移动构造函数看起来如何:
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);
}
?
一个符合 C++11 的编译器will automatically create a move constructor for you (Visual Studio 2013 does not)。默认的移动构造函数将执行成员智能移动并且 std::vector
实现移动语义,因此它应该做你想做的。
但是是的,如果出于某种原因您确实需要自己定义看起来正确的移动构造函数。虽然最好使用构造函数初始化列表并声明它 noexcept:
MemoryPage::MemoryPage(MemoryPage &&other) noexcept : buff(std::move(other.buff)) { }