zoukankan      html  css  js  c++  java
  • 移动构造函数和移动赋值与拷贝构造函数和赋值构造函数的比较

    首先看拷贝构造函数:

    //拷贝构造函数
    A(A& t)
    {
    	if(t.text!=NULL)
    	{
    		int len=strlen(t.text);
    		text=new char[len+1];
    		strcpy(text,t.text);
    	}
    }
    

    拷贝构造函数中实现了深拷贝处理。再看移动构造函数:

    //移动构造函数
    A(A&& t)
    {
    	if(t.text!=NULL)
    	{
    		text=t.text;
    		t.text=NULL;
    	}
    } 

    代码构造和拷贝构造函数类似,但是内存的处理不是拷贝而是转移。注意参数类型是右值引用。

    移动赋值运算符

    赋值运算符的情况和构造函数类似,还是先考察普通的赋值运算符:

    //拷贝赋值运算符
    A& operator=(const A& rhs)
    {
    	if(this!=&rhs)
    	{
    		free();
    		if(rhs.text!=NULL)
    		{
    			int len=strlen(rhs.text);
    			text=new char[len+1];
    			strcpy(text,rhs.text);
    		}
    	}
    	return *this;
    }

    再看移动赋值运算符:

    //移动赋值运算符
    A& operator=(A&& rhs)noexcept
    {
    	if(this!=&rhs)
    	{
    		free();
    		text=rhs.text;
    		rhs.text=NULL;
    	}
    	reeturn *this;
    }
  • 相关阅读:
    mysql批量插入数据的基类
    mount命令解析
    常用linux命令记录
    转载一篇大神的博客文章
    linux查看网卡状态
    centos7配置网卡绑定
    coentos7安装python3
    阿里云ecs 硬盘在线扩容
    centos7安装redis5
    centos7 rpm安装nginx
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9787993.html
Copyright © 2011-2022 走看看