C++ : inheritance without virtuality

标签 c++ polymorphism virtual

我想知道我现在做的事情对C++来说是一种耻辱,还是可以的。

我正在编写用于计算目的的代码。对于某些类,我使用具有虚拟性/多态性的普通继承方案。但是我需要一些类来进行密集计算,如果能避免虚拟性带来的开销,那就太好了。

基本上,我想在没有指针或重定向的情况下使用此类:继承只是为了避免大量复制/粘贴代码(基类的文件大小大约 60Ko(这是很多代码))。所以没有虚函数,也没有虚析构函数。

我想知道从 C++ 的角度来看它是否完全可以,或者它是否会产生副作用(相关类将在程序中大量使用)。

非常感谢。

最佳答案

在 C++ 中使用多态性既不好也不坏。多态性是有目的的,缺乏多态性也是如此。使用继承而不单独使用多态性没有错。

既然多态是有目的的,没有多态也是有目的的,你应该在设计你的类时考虑到这些目的。例如,如果您需要将行为运行时绑定(bind)到类实例,则需要多态性。

综上所述,选择一种方法而不是另一种方法有正确和错误的理由。如果你严格地设计没有多态性的类是因为你想“避免开销”,那可能是一个错误的原因。这是一个过早优化的例子,只要您在没有分析您的代码并证明多态性是一个实际问题的情况下就做出设计更改或决策。

首先根据架构要求进行设计。如果设计证明性能不佳,稍后返回并重构。

关于C++ : inheritance without virtuality,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10720504/

相关文章:

c++ - 一个空的虚拟表可以存在吗?

c++ - 在 C++ 中使用继承时避免不必要的函数声明/定义

c++ - 函数模板 : typename declaration

c++ - C++ 中特定重构的惯用语

razor - 在多个 asp.net core 项目中使用单个布局页面

java - Springfox/Swagger 不解析多态字段

c++ - 如何用复数和多态重载运算符?

c++ - Xerces、xpath 和 XML 命名空间

c++ - 内存屏障到底要解决什么问题?

c++ - 无法找到 -libboost_system