我正在阅读教科书" C ++ Primer Plus,Prata"
第10章中的一段引起了我的注意并使我感到困惑。
Ch.10对象和类:
它说
如果您未提供 一个 ,则编译器会隐式声明默认的构造函数,并且......
我认为应该是
如果您未提供 析构函数 ,则编译器会隐式声明默认的析构函数,并且......
段落是否正确?
我该如何正确解释?
谢谢
答案 0 :(得分:3)
“一”部分是正确的。这只是英语语法的一个细微差别,你可以在句子后面的从属语句中引用某些东西。把它想象成一个前瞻性宣言! “默认构造函数”部分实际上是一个拼写错误:它应该是“默认析构函数”,就像你原先想的那样。
应该这样说:
因为在类对象到期时会自动调用析构函数,所以应该有一个析构函数。如果你没有提供一个[析构函数],编译器会隐式声明一个默认的析构函数,如果它检测到导致销毁对象的代码,它会为析构函数提供一个定义。
这里,“一个”指的是“一个析构函数”,它在句子的后面出现。理解句子的另一个关键是记住声明函数和定义函数之间的区别。如果你没有提供隐式析构函数,编译器总是声明一个隐式析构函数,但只有定义它才需要它(也就是说,如果要调用析构函数的话) )。
更令人困惑的是什么(可能是导致错字的原因)是所有这些对构造函数同样如此。
让我们看看我们是否可以改进段落:
因为当类对象超出范围时将自动调用析构函数,所有类必须具有析构函数。如果没有显式提供,则编译器隐式声明默认析构函数。如果编译器检测到导致销毁对象的代码,那么 也会为析构函数提供默认定义。构造函数也是如此。