C++移动构造函数

C++移动构造函数文章介绍了 C 中的拷贝构造函数的问题 特别是对于包含指针的对象 浅拷贝可能导致资源重复析构

大家好,欢迎来到IT知识分享网。

一、背景

拷贝构造函数又分为浅拷贝和深拷贝,但是存在如下问题:

因此C++就提供了移动构造函数,

  1. 当需要动态分配内存或其他资源,并且资源的所有权需要在不同对象之间传递时,移动构造函数可以更高效地完成任务。
  2. 当使用临时对象进行操作时,移动构造函数可以避免不必要的复制和析构操作,提高程序的效率和性能。

二、定义

移动构造函数是参数类型为右值引用的拷贝构造函数

语法:

类名 ( 类名 && ) (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++中文网

C++11 移动构造函数_关于移动构造函数_庭树的博客-CSDN博客

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/116079.html

(0)
上一篇 2024-11-18 16:45
下一篇 2024-11-18 17:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信