【发布时间】:2018-11-25 21:40:20
【问题描述】:
在构造函数和析构函数中调用虚函数确实不是一个好习惯,应该避免。这是因为虚函数受子类的影响,但在构造或销毁阶段,子类尚未构造(构造中)或已销毁(销毁中)。
但是,如果在构造函数或析构函数中调用虚拟 final 函数会发生什么?我认为应该没有问题,因为它在逻辑上没有错。
禁止在构造函数和析构函数中调用虚函数,因为在子类中声明的虚函数的重写版本中可能会访问尚未初始化的子类变量。
虽然 virtual final 函数不是,但它是 final 并且无法访问子类的变量。
但这是我的假设,在构造函数或析构函数中调用虚函数不合理可能还有其他原因。
所以,总而言之,
- 在 C++ 标准中是否允许在构造/销毁阶段调用虚拟 final 函数?
- 如果是这样,它是否被大多数 C++ 编译器广泛实施?
- 如果不是,那有什么理由吗?
【问题讨论】:
-
“禁止在构造函数和析构函数中使用虚函数”谁说的?
-
不确定您是否需要可读的答案或一些冗长的标准引号,所以我没有提供任何标准参考。 (如果你想要带有language-lawyer 的标准引号标签。)
-
恕我直言,您可能被否决了,因为您的问题将您的假设陈述为事实。也许你应该用“我相信......”来重新表述你的问题。
标签: c++ inheritance constructor virtual-functions