一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成:

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,表示用户需要编译器默认生成该成员函数,当然这个只对上述六个函数有效。

最新文章

  1. Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解
  2. UITabBarButton 点击失效问题
  3. WebResource-asp.net自定义控件引用外部资源方法
  4. Ubuntu下tftp服务搭建
  5. C# 位域[flags] 转
  6. ubuntu18.04安装mysql
  7. mysql 原理 ~ 并行复制
  8. python笔记—循环控制
  9. DW/BI领域的自动化调度方案
  10. JSED204B
  11. NDK历史版本下载方法
  12. 使用 TRESTClient 与 TRESTRequest 作为 HTTP Client(转)
  13. VS2015 与 Git 的简单使用
  14. 用python发邮件实例
  15. java与js交互,相互调用传参
  16. linux drwxr-xr-x 是什么意思
  17. Linux磁盘与文件系统管理(一)
  18. java 代理设计模式
  19. A profile to detect when a SMS database has been changed
  20. 图像添加logo水印函数

热门文章

  1. 开源Bug管理系统Redmine安装和使用心得
  2. 获取JQuery UI tabs中被选中的tabs的方法
  3. 【ATX学习大纲】【ATX基于uiautomator2+Python学习】之Android自动化
  4. AJAX防止多次请求
  5. Switch选择语句能否作用在String【字符串】上,也就是能否这么写:Switch(一个字符串变量)?
  6. mysql中RAND()随便查询记录效率问题和解决的方法分享
  7. Deep Learning阅读资料
  8. linux系统web项目运行环境搭建
  9. ReactJS组件之间通信
  10. manacher算法处理最长的回文子串(二)