解析c++中的默认operator=操作的详解
2013-05-13 08:55
751 查看
在c++中,如果没有定义operator=操作,编译器会提供一个默认的operator=操作。由于operator=操作和拷贝构造函数的功能类似,都执行拷贝操作。因此,编译器也分提供无用的默认operator=操作和非无用的默认operator=操作。并且什么时候提供非无用的默认operator=操作和无用的等操作的情形也和拷贝构造函数类似。(详细分析过程请参考《基于c++中的默认拷贝函数的使用详解》)
对于一个类,编译器会提供非无用的operator=操作的情形:
1 该类是含有虚成员函数(继承自虚基类,或者继承的基类含有虚成员函数也属于这种情况)
2 该类继承的基类自定义了operator=操作(如果基类没有自定义operator=操作,但是编译器会为基类提供非无用的默认operator=操作,也属于这种情况。这就是说,只要基类有一个非无用的operator=操作就行,不管这个非无用operator=操作是自定义的,还是编译器提供的都行)
3 该类含有成员对象,该成员对象自定义了operator=操作(如果成员对象没有自定义operator=操作,但是编译器会为成员对象变量提供非无用的默认operator=操作,也属于这种情况。这就是说,只要成员对象变量有一个非无用的operator=操作,不管这个非无用的operator=操作是自定义的,还是编译器提供的,都行)
并且,如果类自定义了operator=操作,编译器只是负责调用,不会额外提供任何拷贝过程;对于编译器提供的默认operator=操作,不管是无用的还是非无用的,都只执行浅拷贝。
相关文章推荐
- 【python】解析Excel中使用xlrd库、xlwt库操作,使用xluils库修改Excel文件详解(三)
- C++通过OCCI操作Oracle数据库详解
- C++拷贝构造函数和赋值操作(operator=)
- c++ 文件操作详解
- Effective C++ 读书笔记2——C++默认会做什么(类的默认操作)
- C++ - 类的赋值操作 使用 "复制-交换(copy and swap) 技术" 详解
- C 和 C++ 文件操作详解
- C++字符串操作详解(整理)
- C++空类默认函数详细解析
- 经典收藏 C++内存管理操作详解
- 深层解析:C++提供默认的赋值操作符operator=而不提供判等操作符operator==的原因
- C++中的CFile操作详解
- C++中队列的建立与操作详细解析
- 数据结构图文解析之:AVL树详解及C++模板实现
- operator=(LONG);报 "error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int"的处理方法
- C++通过OCCI操作Oracle数据库详解
- CserialPort类函数解析及基本操作流程 基于C++
- c++操作mysql的API函数详解
- 解析C++中构造函数的默认参数和构造函数的重载
- C++内存管理操作详解