解析c++中的默认operator=操作的详解

在c++中,如果没有定义operator=操作,编译器会提供一个默认的operator=操作。由于operator=操作和拷贝构造函数的功能类似,都执行拷贝操作。因此,编译器也分提供无用的默认operator=操作和非无用的默认operator=操作。并且什么时候提供非无用的默认operator=操作和无用的等操作的情形也和拷贝构造函数类似。(详细分析过程请参考《基于c++中的默认拷贝函数的使用详解》)

对于一个类,编译器会提供非无用的operator=操作的情形:

1 该类是含有虚成员函数(继承自虚基类,或者继承的基类含有虚成员函数也属于这种情况)

2 该类继承的基类自定义了operator=操作(如果基类没有自定义operator=操作,但是编译器会为基类提供非无用的默认operator=操作,也属于这种情况。这就是说,只要基类有一个非无用的operator=操作就行,不管这个非无用operator=操作是自定义的,还是编译器提供的都行)

3 该类含有成员对象,该成员对象自定义了operator=操作(如果成员对象没有自定义operator=操作,但是编译器会为成员对象变量提供非无用的默认operator=操作,也属于这种情况。这就是说,只要成员对象变量有一个非无用的operator=操作,不管这个非无用的operator=操作是自定义的,还是编译器提供的,都行)

并且,如果类自定义了operator=操作,编译器只是负责调用,不会额外提供任何拷贝过程;对于编译器提供的默认operator=操作,不管是无用的还是非无用的,都只执行浅拷贝。

(0)

相关推荐

  • 解析c++中的默认operator=操作的详解

    在c++中,如果没有定义operator=操作,编译器会提供一个默认的operator=操作.由于operator=操作和拷贝构造函数的功能类似,都执行拷贝操作.因此,编译器也分提供无用的默认operator=操作和非无用的默认operator=操作.并且什么时候提供非无用的默认operator=操作和无用的等操作的情形也和拷贝构造函数类似.(详细分析过程请参考<基于c++中的默认拷贝函数的使用详解>) 对于一个类,编译器会提供非无用的operator=操作的情形: 1 该类是含有虚成员函数(

  • Java8新特性之接口中的默认方法和静态方法详解

    一.前言 Java 8 引入了默认方法以及可以在接口中定义的静态方法. 默认方法是一个普通的 java 方法,但以 default 关键字开头,静态方法像往常一样用 static 关键字声明. 二.为什么在 Java 接口中使用默认方法? 为什么java在接口中引入了默认方法. 假设一个拖拉机制造公司发布了操作拖拉机的标准接口,如如何挂挡或停车等. 开发者已经开发了不同类型的拖拉机来实现标准的拖拉机接口. 如果公司在其标准接口中增加了新的功能,如如何跳动拖拉机? 开发者需要对他们的类进行修改以定

  • Java中Properties类的操作实例详解

    Java中Properties类的操作实例详解 知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加一些脚本语言Python,Perl之类的,不得已,又得重新拾起.本文通过看<Java编程思想>和一些网友的博客总结而来,只为简单介绍Properties类的相关操作.  一.Java Properties类 Java中有个比较重要的类Properti

  • Redis中键值过期操作示例详解

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key 在 n 毫秒后过期: expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期: pexpireat key millisecondsTimestamp:设置 key 在某个时间戳(精确到毫秒)之后过期: 下面分别来看以上这些命令的具体实现. 1)expire:N

  • Go-ethereum 解析ethersjs中产生的签名信息思路详解

    目录 Go-ethereum 解析ethersjs中产生的签名信息 1. ethers 消息签名 1.1 ethers 对签名消息进行解析 2. Golang 签名解析 3. 总结 Go-ethereum 解析ethersjs中产生的签名信息 在签名验证的过程中,我们判断签名正确的前提是,签名解析后的公钥,和发起这次动作的人是同一个公钥.我们解析签名的需要知道,签名的消息,签名,和公钥. 按照这个思路,我们可以通过ethers实现消息的签名,也可以通过go-ethereum实现. 在签名的解析过

  • Python的shutil模块中文件的复制操作函数详解

    copy() chutil.copy(source, destination) shutil.copy() 函数实现文件复制功能,将 source 文件复制到 destination 文件夹中,两个参数都是字符串格式.如果 destination 是一个文件名称,那么它会被用来当作复制后的文件名称,即等于 复制 + 重命名.举例如下: >> import shutil >> import os >> os.chdir('C:\\') >> shutil.co

  • 解析php中mysql_connect与mysql_pconncet的区别详解

    说说mysql_connect与mysql_pconnect的区别,这俩函数用法上差不多,网上有说应该用pconnect的,pconnect是个 好东西:也有视pconnect如洪水猛兽的,坚决不让用pconnect的,也有态度暧昧不清的.那这个东西到底如何呢? 永久链接并不是说,服务器打开了一个连接,然后所有的人都共享这个链接.永久连接一样是每个客户端来就打开一个连接,有200人访问就有200个连接.其 实mysql_pconnect()本身并没有做太多的处理, 它唯一做的只是在php运行结束

  • Python中的元组(Tuple)操作实例详解

    目录 引言 1.元组的创建&&访问 (1)元组的创建: (2)访问: 2.元组的修改&&删除 (1)元组的修改: (2)元组的删除: 3.元组的内置方法 4.将序列分解为单独的变量 5.实现优先级队列 总结 引言 在Python中,通过数据结构来保存项目中重要的数据信息.Python语言内置了多种数据结构,例如列表,元组,字典和集合等.本堂课我们来讲一讲Python中举足轻重的一大数据结构——元组. 在Python中,我们可以将元组看作一种特殊的列表.它与列表唯一的不同在于

  • C语言中改变目录的相关操作函数详解

    C语言fchdir()函数:改变当前工作目录 头文件: #include <unistd.h> 定义函数: int fchdir(int fd); 函数说明:fchdir()用来将当前的工作目录改变成以参数fd 所指的文件描述词. 返回值:执行成功则返回 0, 失败返回-1, errno 为错误代码. 范例 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <

  • C++类中六个默认的成员函数详解

    浅谈 先来说一下"this指针": C++中通过引入this指针解决该问题,暨:C++编译器给每个"非静态的成员函数"增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问,只不过所有的操作对用户是透明的,暨用户不需要来传递,编译器自动完成. 说了这么多其实编译器在生成程序时获取对象首地址的信息.然后将获取的对象的首地址存放在了寄存器中,成员函数的其它参数都是存放在栈中.而this指针参数则是

随机推荐