如何实现大型非指针成员的移动构造函数
How to implement move constructor for large size non-pointer member?
在这个网站上有一个带有move构造函数的简单类的例子。
类似类的move构造函数看起来怎么样:
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编译器将自动为您创建一个移动构造函数(Visual Studio 2013没有)。默认的移动构造函数将执行成员移动,std::vector
实现移动语义,因此它应该执行您想要的操作。
但是,是的,如果出于某种原因,您确实需要自己定义看起来正确的move构造函数。尽管最好使用构造函数初始化列表并声明它noexcept:
MemoryPage::MemoryPage(MemoryPage &&other) noexcept : buff(std::move(other.buff)) { }
相关文章:
- 从成员指针到整个结构/类的强制转换
- OOP 中的单成员指针
- 使用结构成员指针在C++中填充结构
- 聚合初始化,将成员指针设置为同一结构成员
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 共享 C++ 的数据成员指针
- 如何声明指向成员内容的成员指针m_pmd/m_pmf并访问它们?
- 从类C++外部调用指向成员方法的成员指针
- 结构成员指针是否自动初始化为零?
- 如何删除类内类类型的类成员指针
- 是否打印指向已定义 int 的成员指针
- 指向常量的成员指针
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 无法删除在destructor中的成员指针的课程
- 删除对象而不调用成员指针的析构函数
- 当派生类的基类具有成员指针时,对其进行深层复制