我已经编写了下面发布的代码。我希望能够在
为什么移动语义在此处不能按预期工作?
代码:
可能的输出:
LargeClass
实例之间移动向量的内容。使用了移动构造函数,但是只得到了复制的结果。为什么移动语义在此处不能按预期工作?
代码:
#include <iostream>
#include <vector>
class LargeClass
{
public:
explicit LargeClass (void): numbers(20, 10)
{
}
LargeClass (const LargeClass &rhs): numbers(rhs.numbers)
{
std::cout << "Using LargeClass copy constructor" << '\n';
}
LargeClass (const LargeClass &&rhs): numbers(std::move(rhs.numbers))
{
std::cout << "Using LargeClass move constructor" << '\n';
}
const int* getNumbersAddress(void) const
{
return (numbers.data());
}
private:
std::vector<int> numbers;
};
int main()
{
LargeClass l1;
std::cout << "l1 vector address: " << l1.getNumbersAddress() << '\n';
LargeClass l2(l1);
std::cout << "l1 vector address: " << l1.getNumbersAddress() << '\n';
std::cout << "l2 vector address: " << l2.getNumbersAddress() << '\n';
LargeClass l3 = std::move(l2);
std::cout << "l1 vector address: " << l1.getNumbersAddress() << '\n';
std::cout << "l2 vector address: " << l2.getNumbersAddress() << '\n';
std::cout << "l3 vector address: " << l3.getNumbersAddress() << '\n';
return 0;
}
可能的输出:
可能的输出:
l1 vector address: 0x18ce010
Using LargeClass copy constructor
l1 vector address: 0x18ce010
l2 vector address: 0x18ce070
Using LargeClass move constructor
l1 vector address: 0x18ce010
l2 vector address: 0x18ce070
l3 vector address: 0x18ce0d0
LargeClass ( LargeClass &&rhs )
。 - P0W