c++ 11实现移动构造函数和移动成员向量
C++11 Implementing a Move Contructor and Moving a Member Vector
好的,我先把代码放上去,然后再问我的问题。
#include<vector>
#include<string>
using std::vector;
using std::string;
class MyStringContainer
{
public:
MyStringContainer(vector<string> strVec): _strVec(strVec){;}
MyStringContainer(MyStringContainer&& rhs): _strVec(move(rhs._strVec)){;}
private:
vector<string> _strVec;
}
int main()
{
vector<string> dummyVec(1000000, "arbitrary string");
MyStringContainer strCon1(dummyVec);
MyStringContainer strCon2(move(strCon1));
}
所以我只是花了一些时间学习移动语义,我想我得到了它的基本概念,关于如何交换原始和/或智能指针,并设置丢弃的指针为nullptr。然而,当处理向量(以及所有实现移动语义的容器)时,我不能100%确定我上面的代码是否会正确地"nullptr"源向量的指针元素。vector类的实现是否已经为我处理了这个问题?
std::vector
的实现为您处理此问题。
std::vector类将为您处理此问题。实际上,在这种情况下,您可以使用隐式生成的move构造函数。此外,如果您的构造函数按值接受vector<string>
,这很好,您可能希望使用std::move
将其移动到成员变量中以保存副本:
#include<vector>
#include<string>
class MyStringContainer {
private:
std::vector<std::string> strVec_;
public:
MyStringContainer(std::vector<std::string> strVec): strVec_(std::move(strVec)){ }
};
int main()
{
std::vector<std::string> dummyVec(1000000, "arbitrary string");
MyStringContainer strCon1(std::move(dummyVec));
MyStringContainer strCon2(std::move(strCon1));
}
注意,我使用std::move将dummyVec移动到构造函数中,以保存另一个副本。
相关文章:
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 直接初始化不可复制、不可移动的成员,而不使用聚合初始化
- 在临时将成员带出时省略复制/移动
- 移动类的成员作为常量引用参数传递
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- 如何为具有私有成员的派生类实现移动构造函数
- 我应该移动 std::exchange ed 成员吗?
- 移动具有常量成员的类的构造和分配
- 将参数传递给构造函数和成员函数时移动或复制
- 默认移动成员定义为已删除,而未定义特殊成员?
- C++模板成员初始化:用右值移动构造,但用左值移动引用
- 如何初始化非静态模板成员变量从临时工开始,即而无需复制或移动
- "<某些系统标头>:错误:"<在此处插入函数>"在移动源文件后不是"std"的成员
- 移动构造函数是自动生成的,即使成员没有移动构造函数?
- Clang-Tidy:移动构造函数通过调用复制构造函数来初始化类成员
- 编译器生成的移动成员在静态数据成员上功能
- 从类返回可移动成员变量
- 移动成员函数生成
- 自动生成带有不可移动成员的移动构造函数
- c++ 11实现移动构造函数和移动成员向量