gpt4 book ai didi

c++ - 安全的虚拟决赛

转载 作者:行者123 更新时间:2023-12-01 14:29:10 26 4
gpt4 key购买 nike

考虑以下几点:

class foo
{
public:
virtual void bar() final {}
};

为了防止 bar 在子类中被重新声明,可以使用 virtual final。这是一个好主意吗?这是否会以运行时开销为代价,即使进行了优化?如果已经有一个虚拟表怎么办,它的大小是否会扩展到有bar

最佳答案

我发现了这个问题,因为我有同样的想法 - 所以我认为这是个好主意。

回答 VS 2017 的问题(基于阅读反汇编):

  • 没有运行时开销,即使在 Debug模式下也是如此。只是一个普通的函数调用。
  • 增加了 v-table 的开销(在函数的 vtable 中有一个条目;因此,如果您已经有虚函数,则开销非常小)。
  • 按照预期,它将检测有人试图在派生类中添加 void bar() 的情况。

一个特定的用例是,如果您正在重构并且函数是虚拟的,并且您想要删除它或使其成为非虚拟的。

删除部分也在相关(非重复)问题的一个答案中找到:What's the point of a final virtual function?

然而,它似乎没有被考虑在: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override因此,您可能必须在代码审查中证明它的合理性。

关于c++ - 安全的虚拟决赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62908407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com