std::move 用法举例
时间: 2023-10-16 21:10:59 浏览: 82
std::move是C++11中引入的一个函数模板,其作用是将一个左值转换为右值引用,从而可以实现移动语义。使用std::move可以提高程序的效率,避免不必要的复制操作。
举例来说,假设我们有一个字符串类MyString,其定义如下:
```
class MyString {
public:
MyString(const char* str) {
size_t len = strlen(str);
m_data = new char[len + 1];
strcpy(m_data, str);
}
~MyString() {
delete[] m_data;
}
// 拷贝构造函数
MyString(const MyString& other) {
size_t len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
}
// 移动构造函数
MyString(MyString&& other) noexcept {
m_data = other.m_data;
other.m_data = nullptr;
}
private:
char* m_data;
};
```
在上面的代码中,我们定义了一个MyString类,其中包括一个拷贝构造函数和一个移动构造函数。拷贝构造函数用于创建一个新的MyString对象,并将其内容复制到新的对象中;而移动构造函数则用于将一个右值引用转换为一个新的MyString对象,从而避免不必要的内存拷贝操作。
现在,我们可以使用std::move来调用移动构造函数,例如:
```
MyString str1("Hello");
MyString str2 = std::move(str1);
```
在上面的代码中,我们首先创建了一个MyString对象str1,然后使用std::move将其转换为右值引用,并将其赋值给另一个MyString对象str2。由于使用了移动构造函数,str2将直接获得str1的内存资源,而不需要进行不必要的内存拷贝操作。这样可以提高程序的效率,避免不必要的内存开销。
阅读全文