我正在研究 C++11 中的 move 语义,我很好奇如何在构造函数中 move bool 值、整数 float 等基本类型。还有复合类型,如 std::string。
以下面的类为例:
class Test
{
public:
// Default.
Test()
: m_Name("default"), m_Tested(true), m_Times(1), m_Grade('B')
{
// Starting up...
}
Test(const Test& other)
: m_Name(other.m_Name), m_Times(other.m_Times)
, m_Grade(other.m_Grade), m_Tested(other.m_Tested)
{
// Duplicating...
}
Test(Test&& other)
: m_Name(std::move(other.m_Name)) // Is this correct?
{
// Moving...
m_Tested = other.m_Tested; // I want to move not copy.
m_Times = other.m_Times; // I want to move not copy.
m_Grade = other.m_Grade; // I want to move not copy.
}
~Test()
{
// Shutting down....
}
private:
std::string m_Name;
bool m_Tested;
int m_Times;
char m_Grade;
};
如何 move (不是复制)m_Tested、m_Times、m_Grade。 m_Name move 正确吗?感谢您抽出时间。
最佳答案
从右值或 xvalue 原语对原语进行初始化和赋值与从左值原语进行初始化或赋值具有完全相同的效果;该值被复制,源对象不受影响。
换句话说,您可以使用 std::move
但不会有任何区别。
如果您想更改源对象的值(例如,更改为 0
),您必须自己执行此操作。
关于C++11 - 在构造函数中 move 基本数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24800857/