首页 > 解决方案 > 您只需为您使用的东西与继承付费

问题描述

在讨论什么是好的 C++ 时吹捧的一句话是“你只需为你使用的东西付费”。我听说这被用作使用继承/多态构造和对接口进行编码的想法的理由,因为这些构造将需要在运行时使用 v-table 来处理编译时已知的东西。

这是真的?基本的 OOP 是否打破了 C++ 的主要原则(特别是“编码到接口”的想法是否打破了“你只需为你使用的东西付费”的想法?

标签: c++interfacevtable

解决方案


为正确的工作使用正确的工具。

当在编译时无法知道某个对象的确切类型时,v-table 很有用。如果这适用于你的程序,那么你就是为你使用的东西付费。如果它不适用,那么有一些方法可以在不引入 v-table 的情况下实现安全多态性(不使用虚函数;使基类析构函数受保护)。

这里没有内在的矛盾,但需要了解所使用的工具。使用次优工具并最终支付比您使用的更多的费用并不难。(你可以对算法说同样的话——使用次优算法并不难,最终会使用比你需要的更多的时间/空间。这不是语言的错。)


推荐阅读