虚拟决赛作为安全
Virtual Final As Safety
考虑以下内容:
class foo
{
public:
virtual void bar() final {}
};
为了防止bar
在子类中被重新声明,可以使用virtual final
。这是个好主意吗?即使进行了优化,这是否会以运行时开销为代价?如果已经有一个虚拟表,它的大小会被扩展为具有bar
吗?
我发现了这个问题,因为我有同样的想法,所以我认为这是个好主意。
回答VS 2017的问题(基于阅读拆解(:
- 即使在调试模式下也没有运行时开销。只是一个正常的函数调用
- 添加v-table的开销(在vtable中为函数添加一个条目;因此,如果您已经有了虚拟函数,那么开销非常小(
- 按照预期,它将检测到有人试图在派生类中添加
void bar()
的情况
一个特定的用例是,如果您正在重构,并且函数是虚拟的,并且您希望删除它或使它成为非虚拟的。
删除部分也出现在相关(非重复(问题的一个答案中:What';最后一个虚拟函数的意义是什么?
然而,它似乎没有被考虑在:http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-超控因此,您可能需要在代码审查中证明它的合理性。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将元素添加到数组的线程安全函数?
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 如何在C++中获得"静态纯虚拟"功能?
- C++中的线程安全删除
- C++无法定义虚拟函数 OUTER 类和头文件
- 通过网络、跨平台传递std::变体是否安全
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 使用范围解析运算符时,在构造函数中调用虚拟方法是否安全?
- 在特殊情况下使析构函数不是虚拟的,并删除基指针是否安全
- 将子结构值设置为对象构造函数中安全的纯虚拟函数返回的值
- 编写非虚拟条件成员函数安全吗
- 这种使用虚拟受保护方法扩展库的方式是否安全
- 在抽象构造函数/析构函数中调用纯虚拟函数安全吗
- 对于C++基类来说,存储"this"的值以供构造后的未来虚拟调用安全吗?
- 如果QObject是从direct派生的,那么使用“虚拟”多重继承是否安全?
- 虚拟方法调用线程安全吗