关闭

从汇编看c++的默认operator=操作

发表于:2013-5-27 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:chaoguo1234    来源:51Testing软件测试网采编

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

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

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

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

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

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

相关链接:

从汇编看c++的extern关键字

从汇编看C++中的引用和指针

从汇编看c++中的static关键字

从汇编看c++中的默认构造函数

从汇编看c++函数的默认参数

从汇编看c++中的变量类型

从汇编看c++中的const常量

从汇编看c++中的默认拷贝函数

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号