默认构造函数创建时间和多个定义

Default constructor creation time & multiple definitions

本文关键字:定义 时间 构造函数 创建 默认      更新时间:2023-10-16

据我所知,默认构造函数是在需要时创建的。实际上意味着,编译器实际上只在需要调用它时才创建它。

假设我有两个文件,f.c和g.c,它们都有对象创建代码,需要一个默认构造函数。编译器如何防止创建多个默认构造函数…?它怎么"知道"只创造一个?尽管我在两个文件中使用它,并且没有自己实现它。

我的教授告诉我这与内联有关,并让我检查一下。

有什么建议吗?

你(很可能还有你的教授)误解了。
在c++中,你可以多次声明一个函数,但是这个函数只能有一个定义。这是单一定义规则的简单定义。即使您在两个独立的转换单元中创建对象。编译器为创建对象而调用的构造函数只定义一次。

为了回答你的问题,
它怎么知道只创建一个?
它被编程为创建一个且唯一的定义,因为它需要遵守c++标准定义的唯一定义规则。

一个定义规则的例外是内联函数。内联函数允许有多个定义,只要所有定义完全相同。