C++中什么情况下编译器会自动生成默认的拷贝构造函数?

我最近在看人民邮电出版社,董山海写的《C与C++程序员面试秘笈》,其中第6章涉及到两个题目:
1.C++中的空类默认会产生哪些成员函数?解答是会生成默认构造函数,拷贝构造函数,析构函数,赋值函数和取址函数等等。
2、什么情况下编译器会产生默认的copy constructor?解答是没有定义复制构造函数,并且在代码中用到了复制构造函数,编译器就会生成默认的复制构造函数。还说如果用户定义了构造函数,且不是复制构造函数,代码中如果用到了复制构造函数,编译器会生成默认的复制构造函数,如果没有用到,就不会生成。

我有疑问:那空类中也没有用到拷贝构造函数,为什么会生成默认的拷贝构造函数呢?
难道是因为空类中连构造函数也没有定义,所以会统统生成?一旦定义了构造函数,没有用到拷贝构造函数就不会生成默认的了吗?求各位大神解答!

第1个回答  2022-06-23

默认情况下,c++编译器至少给一个类添加3个函数

    默认构造函数(无参,函数体为空)

    默认析构函数(无参,函数体为空)

    默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则如下:

    如果用户定义有参构造函数,C++不在提供默认无参构造,但是会提供默认拷贝构造

    如果用户定义拷贝构造函数,c++不会再提供其他构造函数

第2个回答  2019-06-18
如果没有显式的指定构造函数,编译器会提供无参的构造函数和拷贝构造函数。追问

您好 我增加悬赏了,麻烦您再解释一下:请问如果指定了构造函数,那么不用拷贝构造函数,编译器就不会提供拷贝构造函数吗?

本回答被网友采纳
相似回答