ano*_*orm 12 c++ member-function-pointers
我的问题不是从基类构造函数调用虚拟成员函数,而是指向虚方法成员函数的指针在基类构造函数中是否有效.
鉴于以下内容
class A
{
void (A::*m_pMember)();
public:
A() :
m_pMember(&A::vmember)
{
}
virtual void vmember()
{
printf("In A::vmember()\n");
}
void test()
{
(this->*m_pMember)();
}
};
class B : public A
{
public:
virtual void vmember()
{
printf("In B::vmember()\n");
}
};
int main()
{
B b;
b.test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于所有兼容的c ++编译器,这会产生"In B :: vmember()"吗?
指针是有效的,但是您必须记住,当通过指针调用虚拟函数时,它始终根据左侧使用的对象的动态类型进行解析。这意味着当您从构造函数调用虚拟函数时,直接调用它还是通过指针调用它并不重要。在这两种情况下,调用都将解析为其构造函数当前正在工作的类型。当您在对象构造(或销毁)期间调用虚拟函数时,这就是虚拟函数的工作方式。
另请注意,指向成员函数的指针通常在初始化时不附加到特定函数。如果目标函数是非虚函数,则可以说该指针指向特定函数。但是,如果目标函数是虚拟的,则无法说出指针指向的位置。例如,语言规范明确指出,当您比较(相等)两个恰好指向虚函数的指针时,结果是未指定的。