C++中的默认成员函数
2024-09-27 08:36:03
一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成:
1、default constructor
2、copy constructor
Someclass::Someclass(const Someclass &);
3、copy assignment operator
Someclass & Someclass::operator=(const Someclass &);
4、destructor
对于C++11,又增加了两个:
5、move constructor
Someclass::Someclass(Someclass &&);
6、move assignment
Someclass & Someclass::operator=(Someclass &&);
要牢记这几个函数的原型(输入参数、返回类型),还有几条规则,关于何时编译器不会生成上述默认成员函数的:
若用户自定义了任意形式的构造函数(即使是拷贝构造函数),编译器将不会生成默认构造函数
若定义了析构函数,或拷贝构造函数或拷贝赋值操作符,编译器将不会生成默认的move constructor和move assignment
若定义了move construcor或move assignment,编译器将不会生成默认的拷贝构造函数或拷贝赋值操作符。
最后,在C++11中有一种很别致的偷懒的办法,
Someclass::Someclass(const Someclass &) = default,表示用户需要编译器默认生成该成员函数,当然这个只对上述六个函数有效。
最新文章
- Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解
- UITabBarButton 点击失效问题
- WebResource-asp.net自定义控件引用外部资源方法
- Ubuntu下tftp服务搭建
- C# 位域[flags] 转
- ubuntu18.04安装mysql
- mysql 原理 ~ 并行复制
- python笔记—循环控制
- DW/BI领域的自动化调度方案
- JSED204B
- NDK历史版本下载方法
- 使用 TRESTClient 与 TRESTRequest 作为 HTTP Client(转)
- VS2015 与 Git 的简单使用
- 用python发邮件实例
- java与js交互,相互调用传参
- linux drwxr-xr-x 是什么意思
- Linux磁盘与文件系统管理(一)
- java 代理设计模式
- A profile to detect when a SMS database has been changed
- 图像添加logo水印函数