大家好,欢迎来到IT知识分享网。
一、背景
拷贝构造函数又分为浅拷贝和深拷贝,但是存在如下问题:
因此C++就提供了移动构造函数,
- 当需要动态分配内存或其他资源,并且资源的所有权需要在不同对象之间传递时,移动构造函数可以更高效地完成任务。
- 当使用临时对象进行操作时,移动构造函数可以避免不必要的复制和析构操作,提高程序的效率和性能。
二、定义
移动构造函数是参数类型为右值引用的拷贝构造函数
语法:
类名 ( 类名 && ) |
(1) | (C++11 起) | |||||||
class_name ( 类名 && ) = default; |
(2) | (C++11 起) | |||||||
class_name ( 类名 && ) = delete; |
默认情况下,左值初始化同类对象只能通过拷贝构造函数完成,如果想调用移动构造函数,则必须使用右值进行初始化。C++11 标准中为了满足用户使用左值初始化同类对象时,也通过移动构造函数完成的需求,新引入了 std::move() 函数,它可以将左值强制转换成对应的右值,由此便可以使用移动构造函数。
三、使用
#include<iostream> using namespace std; class A{ public: A(){ this->num = new int(10); cout << "构造函数" << endl; } A(A&x){ this->num = new int(*x.num); cout << "拷贝构造函数" << endl; } A(A&&x){ this->num = x.num; x.num = nullptr; cout << "移动构造函数" << endl; } ~A(){ cout << "析构函数" << endl; if (this->num != nullptr){ delete num; } } private: int *num; }; void test(){ A a; A b=a; A c(move(a)); } int main() { test(); system("pause"); return 0; }
移动构造函数_C++中文网
C++11 移动构造函数_关于移动构造函数_庭树的博客-CSDN博客
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/116079.html