百科问答小站 logo
百科问答小站 font logo



C++在面向对象编程中,非虚继承和非虚析构函数的存在是为了解决什么问题? 能否都用虚继承和虚析构函数? 第1页

  

user avatar   haozhi-yang-41 网友的相关建议: 
      

不考虑性能的话,当然可以。

一般来说,在大多数情况下,还是推荐用虚析构的。因为它的额外开销不算太大——vptr 一般都会有,所以实际额外开销也就调用时多一次查表。

虚继承就很少用。一来适用场景很少,二来要很可能要增加虚基类表指针和多个虚函数表指针,而且访问虚基类的所有成员及变量,都要增加一次或两次的查表跳转开销。而且还有一点,在这种情况下,因为很多状态是运行时确定的,所以编译器很难做各种编译优化。


总而言之,C/C++ 的哲学是:如果我用不到XX特性,那就不要为此付出额外代价。

所以,在这种哲学下,你的问题应该反过来问:虚继承和虚析构函数的存在是为了解决什么问题? 能否都用非虚继承和非虚析构函数?

如果你接受不了这种哲学,总想着一招鲜吃遍天的话,不妨考虑下php/python之类的语言吧。。。




  

相关话题

  为什么C语言中计算机认为0是假的,其他数都是真的? 
  C++的运行时多态,性能损失有多大? 
  有哪些比较魔性的函数图象? 
  C++在面向对象编程中,非虚继承和非虚析构函数的存在是为了解决什么问题? 能否都用虚继承和虚析构函数? 
  如果要改进C语言,您最希望添加哪些语言特性,移除哪些语言特性? 
  在C++中链表重不重要? 
  如何编写异常代码?比如处理bad-alloc的时候,是不是应该先销毁当前资源? 
  如何算出这个求和式子结果等于 (2n)!!/(2n+1)!! ? 
  GCC 4 编译警告:warning: dereferencing type-punned pointer will break strict-aliasing rules 有什么比较好的解决办法? 
  指向指向指向指针的指针的指针的指针有什么用? 

前一个讨论
如何评价左小祖咒屡次以「侵犯权益」的名义投诉删除知乎答案的行为?
下一个讨论
如何看待在百草味旗舰店购买的凤梨酥吃出塑料,百草味始终不愿意按照食品安全法赔偿?





© 2025-03-31 - tinynew.org. All Rights Reserved.
© 2025-03-31 - tinynew.org. 保留所有权利