gpt4 book ai didi

c++ - 如何防止在构造函数或析构函数中调用虚函数?

转载 作者:行者123 更新时间:2023-11-28 01:09:01 31 4
gpt4 key购买 nike

一些 C++ 资料提到我们不能在 ctor 或 dtor 中调用虚函数,

(
抱歉,我认为最好改为
一些 C++ 资料提到我们最好不要在 ctor 或 dtor 中调用虚函数,

)

但我们可能会不小心调用它们。有什么办法可以防止这种情况发生吗?

例如:

# include < iostream >  
using namespace std;

class CAT
{
public:
CAT(){ f();}
virtual void f(){cout<<"void CAT:f()"<<std::endl;}
};

class SMALLCAT :public CAT
{
public:
SMALLCAT():CAT()
{
}
void f(){cout<<"void SMALLCAT:f()"<<std::endl;}
};

int main()
{
SMALLCAT sc;

}

输出:

void CAT::f()  //not we expected!!!

谢谢

最佳答案

你需要把那些“C++ Material ”扔进垃圾桶。

您当然可以从构造函数或析构函数中调用虚函数。他们会做好自己的工作。您只需要了解语言规范,该规范明确指出虚拟分派(dispatch)机制根据对象的当前动态类型而不是其最终预期动态类型工作.这些类型对于正在构造/析构的对象来说是不一样的,当新手试图从构造函数/析构函数中调用虚函数时,这常常会使他们感到困惑。然而,从构造函数和析构函数调用虚函数是该语言的有用功能,只要您知道它们的作用以及它们在这种情况下的工作方式。为什么要“阻止”它?

这就像说除法运算符是危险的,因为可以将某物除以零,并询问如何“防止”它在程序中的使用。

关于c++ - 如何防止在构造函数或析构函数中调用虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495640/

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