非造晶和非抽象基类中的虚拟破坏者
virtual destructors in non-polymorphic and non-abstract base class
如果问这个问题,我道歉。我正在写一个将与Python接触的C 类。到目前为止,类实施是:
struct body_data
{
map <int, atom*> atoms;
map <int, bond*> bonds;
map <int, dihedral*> dihedrals;
};
此类是另一个类的基类。我没有在此课程中添加灾难函数,因为我很困惑。在所有有关基础类别的破坏者的文章中,他们认为毁灭者应该是公共虚拟的或受保护的。由于我不打算在C 代码或Python界面中使用上述类多态使用,我真的需要使Destructor公开虚拟或受保护吗?我正在考虑将课程公开,以便程序员知道永远不要用多态使用此类。我的想法正确吗?
您只需要需要当您具有虚拟功能时,要将公共驱动器声明为虚拟的,这表明您打算从中衍生出您的类型。我强调"需求",因为仅当您的基本类型具有非POD类型或时,您才知道您知道从您的类型中衍生的类型将具有非POD类型。是的,您可以拥有一个零虚拟成员的基类,但是这样的基础将具有边缘效用。不必要地添加虚拟成员会添加开销。即,如果您的类型除虚拟驱动器以外没有虚拟成员,则通常您已经通过一个指针增加了每个实例的大小,并且对对象的破坏会稍慢一些,因为您必须至少通过至少通过至少通过至少调用destructor单个内存间接。第一个后,逐步添加虚拟成员应该具有固定的内存成本,但是您仍然会为不必要的虚拟化功能施加运行时罚款。
就您而情况您肯定会想定义适当交易记忆的驱动器,并且由于您表示它是其他类型的基础,因此应将其标记为虚拟,除非您绝对可以确保实例永远不会从任何事物中销毁任何东西除了指向最派生的类型的指针(做出此假设非常危险,并且失败可能导致难以诊断内存泄漏)。
相关文章:
- 虚拟决赛作为安全
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 如何在C++中获得"静态纯虚拟"功能?
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么我的虚拟破坏者多次执行这些执行
- 纯抽象类的虚拟破坏者
- 与虚拟破坏者相比,Shared_PTR的运行时开销用于子类破坏
- 虚拟破坏者与普通破坏者
- 删除具有非虚拟破坏者的对象将引起
- 在C 中,是否有一种(新的)方法来测试类是否在模板中具有虚拟破坏者而无需实例化实例
- 没有虚拟功能,但仍然需要虚拟破坏者
- 当试图检测基类是否具有虚拟破坏者时,如何获取正确的编译器错误消息
- 获取虚拟破坏者的重新定义错误
- 非造晶和非抽象基类中的虚拟破坏者
- 如何在Xcode中导出虚拟破坏者
- 虚拟破坏者:不工作