c++ 移动语义
-
概念
移动语义:转移所有权,和深拷贝的区别在于,深拷贝是对于别人的资源,自己重新分配一块内存存储复制过来的资源,而移动语义,类似于转让。对于那块资源,转为自己所拥有,别人不再拥有也不会再使用。 -
示例
class TestA {
public:
TestA(int size) : size_(size) {
data_ = new int[size];
}
TestA() {}
TestA(const TestA& a) {
size_ = a.size_;
data_ = new int[size_];
cout << "copy " << endl;
}
TestA(TestA&& a) {
this->data_ = a.data_;
a.data_ = nullptr;
cout << "move " << endl;
}
~TestA() {
delete[] data_;
}
int* data_;
int size_;
};
int main() {
TestA a(10);
TestA b = a;
TestA c = std::move(a);
return 0;
}
这里如果不使用std::move(), 会有很大的拷贝代价,使用移动语义可以避免很多无用的拷贝。
移动语义针对那些实现了移动构造函数的类对象,对于基本类型还是会拷贝。