默认构造函数,拷贝函数

默认构造函数

默认的构造函数是指为所有参数都提供了默认值的构造函数通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。
如果你没有为你的类提供任何构造函数,那么编译器将自动为你生成一个默认的无参构造函数。一旦你为你的类定义了构造函数,哪怕只是一个,那么编译器将不再生成默认的构造函数。

默认构造函数何时使用?

1. 当你使用静态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数

如:Object buffer[10];//call default constructor

2. 当你使用动态分配的数组(new操作符),而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码,如果Object没有默认的构造函数,是无法通过编译的,因为new操作符要调用Object类的无参构造函数类初始化每个数组元素。

Object* buffer =newObject[10];

3. 当你使用标准库的容器时,如果容器内的元素类型是某个类的对象时,那么这个类就需要默认的构造函数

如:vector<Object> buffer;

4. 一个类A以另外某个类B的对象为成员时,如果A提供了无参构造函数,而B未提供,那么A则无法使用自己的无参构造函数,将导致编译错误

5. 类A定义了拷贝构造函数,而没有提供默认的构造函数,B继承自A,所以B在初始化时要调用A的构造函数来初始化A,而A没有默认的构造函数,故产生编译错误。

-------------------------------------------------------------------------------------------------

拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他的对象的构建及初始化。拷贝构造函数中为成员变量申请了新的内存空间,这就使得两个对象的成员变量不指向同一个内存空间如果在类中没有显式地声明一个拷贝构造函数,那么编译器会私下里制定一个函数来进行对象间的位复制(bitwise copy),这属于浅拷贝。这个隐含的拷贝构造函数简单地关联了所有的类成员。

拷贝构造函数何时用?

1. 一个对象以值传递的方式传入函数体

2. 一个对象以值传递的方式从函数返回

3. 一个对象需要通过另一个对象进行初始化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,144评论 1 51
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 7,901评论 0 3
  • 一盘炸鸡在舌尖酥软一杯啤酒在喉咙酣畅血液淌满大地阳光洒满天——2017-07-10
    小者阅读 1,222评论 0 0
  • 现代社会人们会感到孤独越来越多,感觉太疏远,假的多,表面惺惺作态,世界变得如此冷漠,集中表现为人际交往的“信任缺失...
    北仑情阅读 3,068评论 0 0
  • ifstat 和 iftop 命令使用 ifstat介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量...
    很少更新了阅读 12,341评论 0 2