一、如果用户没有提供构造函数、copy构造函数、copy assignment操作符和析构函数,当且仅当这些函数被需要的时候,编译器才会帮你创建出来。编译器生成的这些函数都是public且inline。

  当你写下这样一个类的时候:

class Empty {};

  如果上述的函数是被需要的话,那么编译自动会帮你把类修改为,如下:

class Empty
{
public:
Empty() {...}; //这里进行数据成员的默认初始化,如果有虚函数的话,这里还会配置好虚函数表
Empty(const Empty& rhs) {…}
~Empty() {..} //这里先对数据成员析构,然后销毁虚函数表等
Empty& operator=(const Empty& rhs) {...}
};

  有待在inside c++ object model中细致考证(注:其实对于copy构造函数、赋值操作符重载,并不是你自己没有编写,当需要被调用的时候就被生成!如果编译器判断这个类的需要生成的copy构造函数等是trival,平凡的copy构造函数,那么编译器也不会生成copy'构造函数等,只会在其需要copy构造函数的或者赋值操作符重载的地方,施行逐位拷贝)。

二、注意,编译器产出的析构函数是个non-vitual,除非这个class的base class自身声明有virtual析构函数。

三、注意,在一个“内含reference成员”的class内支持赋值操作,必须自己定义copy assignment操作符。对于“内含const成员”的class,同样如此。

  不然编译器会提示:

non-static reference member ‘std::string& A::m_name’, can’t use default assignment operator

或者

non-static const member ‘const string A::m_name’, can’t use default assignment operator

四、如果某个base class将copy assignment操作符声明为private,编译器将拒绝为其derived class 生成一个copy assignment操作符。

最新文章

  1. jvm
  2. MysqlWorkbench连接远程数据
  3. STL迭代器之二:迭代器型别
  4. Tomcat中间件URL中文字符传递问题
  5. POJ 2236 Wireless Network(并查集)
  6. 如何在R中加载”xlsx”包
  7. 数据爬取ing
  8. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 增、查、改、删操作
  9. struts2视频学习笔记 11-12(动态方法调用,接收请求参数)
  10. RestEasy传值方式
  11. ios水果风暴游戏源码下载
  12. ContentLoadingProgressBar不显示问题
  13. hadoop2.2编程:MRUnit
  14. JS拖动浮动DIV
  15. .NET Mvc Razor
  16. HDU 1003 Max Sum【动态规划求最大子序列和详解 】
  17. Scala 快速入门
  18. notepad++ 代码注释快捷键
  19. 自学PYTHON分享 --基础1
  20. Call to undefined function think\finfo_open()

热门文章

  1. Text Template Transformation Toolkit
  2. bnuoj 4209 Triangle(计算几何)
  3. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
  4. Makedown常用符号整理
  5. 想成为真正的代码gg,目标
  6. 1072: [SCOI2007]排列perm - BZOJ
  7. protocol buffer 整数序列化
  8. trie树(前缀树)
  9. 运用 DataContractSerializer 存储本地对象
  10. 指针强转和void*