构造函数,拷贝构造函数

一、编译器什么情况下合成构造函数

类A没有自定的缺省构造函数

1、该类中包含一个类型B成员变量,类B有一个缺省的构造函数

合成的这个默认构造函数目的是为了调用成员变量的缺省构造函数

2、父类带缺省构造函数

3、类中含有虚函数

(1)编译器会为我们生成一个基于该类的虚函数表

(2)把类的虚函数表地址赋给类对象的虚函数表指针

///////////

如果我们有自己的默认构造函数,编译器会根据需要扩充我们的默认构造函数,附加做的事情

(1)生成虚函数表

(2)调用父类的构造函数

(3)把类的虚函数表地址赋给对象的虚函数表指针

4、带有虚基类

 

 

二、编译器什么情况下合成拷贝构造函数

A类中没有自定义的拷贝构造函数,

1、成员变量有拷贝构造函数

如果类A中都是一些简单的数据类型,编译器不需要合成拷贝构造函数,直接内部直接按值拷贝过去

但是如果含有一个类型为B的成员变量,该成员变量的类型有构造函数

那么,当代码中有涉及到类A的拷贝构造函数时候,编译器会为类A合成一个拷贝构造函数。

合成的这个拷贝构造函数值干一些特殊的事情(调用成员变量的拷贝构造函数),

如果只是一些成员变量值的拷贝,编译器不会使用合成的拷贝构造函数

2、父类有拷贝构造函数

3、该类声明了或继承了虚函数

拷贝构造函数中拷贝虚函数表指针的值。

4、该类含有虚基类

 

posted @ 2020-07-16 20:16  min_zhi  阅读(126)  评论(0编辑  收藏  举报