c++移动构造函数详解
时间: 2023-08-28 21:08:43 浏览: 75
移动构造函数是C++11引入的一个新特性,通过移动构造函数,可以将一个对象的资源所有权转移到另一个对象,避免了不必要的资源拷贝,提高了程序的运行效率。
移动构造函数的定义如下:
```cpp
class ClassA {
public:
ClassA(ClassA&& other) noexcept {
// 移动构造函数的实现
}
};
```
其中,`ClassA&&`表示移动构造函数的参数为右值引用。移动构造函数通常使用`noexcept`关键字进行修饰,表示该函数不会抛出异常。
移动构造函数的实现需要将另一个对象的资源转移到当前对象,并将另一个对象的资源置为无效。常见的实现方式是通过移动构造函数中的`std::move()`函数来完成。例如,对于一个包含动态分配内存的类:
```cpp
class MyClass {
public:
MyClass(int n) : data(new int[n]), size(n) {}
MyClass(MyClass&& other) noexcept : data(other.data), size(other.size) {
other.data = nullptr;
other.size = 0;
}
~MyClass() {
delete[] data;
}
private:
int* data;
int size;
};
```
在移动构造函数中,将另一个对象的指针和大小赋值给当前对象,并将另一个对象的指针置为nullptr,大小置为0,表示另一个对象的资源已经被移动到了当前对象。
使用移动构造函数可以大大提高程序的性能,特别是在涉及到大量的资源拷贝时。移动构造函数可以通过`std::move()`函数进行调用,例如:
```cpp
MyClass a(10);
MyClass b(std::move(a)); // 调用移动构造函数
```
在这个例子中,对象a的资源被移动到了对象b中,对象a的资源已经无效了。