引用 Effective C++ (Scott Meyers),第三版,第 7 项:
在多态基类中将析构函数声明为 virtual。
这意味着要继承的类至少应该具有虚拟析构函数。
在编写一些应用程序/库时,有些类(我会说不少)并不是为了继承而设计的。我们通常依赖于一些约定,其中不应该继承不是他自己的类或不检查它是否安全。
现在,编码标准可能需要编写和设计类,以便继承始终是安全的。我觉得这可能太多了。C++11 添加了final确保类不被继承的关键字。您是否建议将所有不是为继承而设计的类标记为final默认值?
这将使编译器强制执行我们多年来按照惯例所做的事情。但是该约定可能被认为足够好理解且易于遵循(特别是因为通常避免继承,而首选组合),因此在编写代码时可能只是另一件需要注意的事情。
仅仅因为一个类没有任何虚函数并不意味着从它继承没有意义。这只是意味着它可能不是有意的,并且您必须小心不要通过指向基类的指针删除派生对象的任何实例。在这种情况下,通常private会使用继承作为组合的替代方法,以表明从基类继承纯粹是一个实现细节,并且派生类不应被视为与基类具有“is-a”关系。
标记一个类final是一种很好的方式,通过使其不可能来表达一个类根本不打算从中派生。所以,如果这就是你想要的,那就final在课堂上打个招呼吧。
在某些情况下,标记(派生)类final以防止任何进一步的派生还可以带来额外的好处,即使编译器更容易对函数调用进行虚拟化,从而在某些情况下获得更好的性能。
在我看来,final应该(通常)是默认值,如果您发现您最终需要/想要从该类派生,则可以稍后将其删除。但这只是意见。
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |