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

2016-02-19 09:21 8 1 收藏

有了下面这个解析c++中的默认operator=操作的详解教程,不懂解析c++中的默认operator=操作的详解的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

来源:http://www.tulaoshi.com/n/20160219/1590523.html

延伸阅读
区别 C++中对于类来说,对于其中的成员,用点操作符.来获得, 而对于一个指向类对象的指针来说,则用箭头操作符-调用该指针所指向对象的成员。 当类定义-重载操作符后,则既可以用箭头操作符,也可以用点操作符。 重载-操作符 重载箭头操作符必须定义为类成员函数。没有显式形参(而且是类成员,唯一隐式形参是this)。-的右操作数不是...
c++中的源程序: 代码如下: class X { private:     int i; }; int main() {     X x; } 上面的类X没有定义构造函数,仅仅有一个int i。 下面为其汇编程序: 代码如下: ; 7    : int main() {     push    ebp;ebp为一个寄存器,总是指向一个函数调用...
在说内部连接与外部连接前,先说明一些概念。 1.声明 一个声明将一个名称引入一个作用域; 在c++中,在一个作用域中重复一个声明是合法的 以下都是声明: int foo(int,int); //函数前置声明 typedef int Int; //typedef 声明 class bar; //类前置声明 exter...
本文中,将要介绍与继续相关的C++/CLI主题,并以现实生活中银行交易的三种形式:存款、取款、转账,来说明类的继续体系,且以一种新的枚举形式来实现。 枚举器 请看例1中声明的类型,它存在于其自身的源文件中,并编译为一个只包含此类型的程序集: 例1: public enum class TransactionType : ...
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 假如我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 !-- frame contents -- !-- /frame contents -- 定义一个指向函数的指针用如下的形式,以上面的test()为例: ...

经验教程

192

收藏

61
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部