关于虚函数重载遇到的怪问题 -- 为什么经常调用了基类的函数

本来想基类实现一个线程,维护一些基本的东西,然后由子类重载线程工作函数,如下:

CALLBACK threadfunc(LPVOID dwUser)

{

  ((cbase *)dwUser)->work();

}

cbase::cbase

{

  createthread(.., ... ,threadfunc, this,..)

}

virtual cbase::work()

{

  while(1)

  {

    dispatch();
  }

}

然后写子类,继承这个基类,同时在子类中实现自己的work()函数,结果运行的时候怎么发现经常运行的是基类的work().

纳闷了好一阵子。。。。。。。

才明白一个问题:基类在生成线程的时候,子类的构造体还没运行,这时候线程的Callback函数根据指针来判断该调用哪一个work()--- 子类还是基类, 这就有问题了。。。

这玩意,可能玩惯了C++人都没有注意,给自己一个提醒!! ---- 电脑都是顺序执行的。。。

你可能感兴趣的:(关于虚函数重载遇到的怪问题 -- 为什么经常调用了基类的函数)