我正在尝试使用移动语义(仅作为实验)。 以下是我的代码:
class MyClass {
public:
MyClass(size_t c): count(c) {
data = new int[count];
}
MyClass( MyClass&& src) : count(src.count) {
data = src.data;
src.count = 0;
src.data = nullptr;
}
void operator=( MyClass&& src) {
data = src.data;
count = src.count;
src.count = 0;
src.data = nullptr;
}
~MyClass() {
if (data != nullptr)
delete[] data;
}
int* get_data() const {
return data;
}
size_t get_count() const {
return count;
}
private:
MyClass(const MyClass& src) : count(src.count) {
data = new int[src.count];
memcpy(data, src.data, sizeof(int)*src.count);
}
void operator=(const MyClass& src) {
count = src.count;
data = new int[src.count];
memcpy(data, src.data, sizeof(int)*src.count);
}
int* data;
size_t count;
};
int main()
{
MyClass mc(150);
for (size_t i = 0; i < mc.get_count(); ++i)
mc.get_data()[i] = i;
MyClass &&mc2 = std::move(mc);
return 0;
}
但是std::move并没有将mc移动到mc2,它只是复制了指针(将指针原封不动地复制了)。如果我删除了复制构造函数,编译器会为MyClass生成一个。
我该如何强制使用移动语义?我该如何使它在这样的构造中被使用:
MyClass mc2(mc); //Move, not copy
-or-
MyClass mc2 = mc; //Move, not copy
我尝试使用“&&”运算符来明确标记右值,但是,当然,它没有起作用。
MyClass mc2 = std::move(mc);
为什么你立即得出需要使用&&
的结论呢? - user1508519