编译器隐式声明了默认构造函数

时间:2016-02-16 12:59:36

标签: c++ destructor

我正在阅读教科书" C ++ Primer Plus,Prata"

第10章中的一段引起了我的注意并使我感到困惑。

Ch.10对象和类:

enter image description here

它说

  

如果您未提供 一个 ,则编译器会隐式声明默认的构造函数,并且......

我认为应该是

  

如果您未提供 析构函数 ,则编译器会隐式声明默认的析构函数,并且......

段落是否正确?

我该如何正确解释?

谢谢

1 个答案:

答案 0 :(得分:3)

“一”部分是正确的。这只是英语语法的一个细微差别,你可以在句子后面的从属语句中引用某些东西。把它想象成一个前瞻性宣言! “默认构造函数”部分实际上是一个拼写错误:它应该是“默认析构函数”,就像你原先想的那样。

应该这样说:

  

因为在类对象到期时会自动调用析构函数,所以应该有一个析构函数。如果你没有提供一个[析构函数],编译器会隐式声明一个默认的析构函数,如果它检测到导致销毁对象的代码,它会为析构函数提供一个定义。

这里,“一个”指的是“一个析构函数”,它在句子的后面出现。理解句子的另一个关键是记住声明函数和定义函数之间的区别。如果你没有提供隐式析构函数,编译器总是声明一个隐式析构函数,但只有定义它才需要它(也就是说,如果要调用析构函数的话) )。

更令人困惑的是什么(可能是导致错字的原因)是所有这些对构造函数同样如此。

让我们看看我们是否可以改进段落:

  

因为当类对象超出范围时将自动调用析构函数,所有类必须具有析构函数。如果没有显式提供,则编译器隐式声明默认析构函数。如果编译器检测到导致销毁对象的代码,那么 也会为析构函数提供默认定义。构造函数也是如此。

相关问题