(一)问题初现
(1)问题代码
在调试一个项目时,发生崩溃,通过调用堆栈看是访问成员变量时发生的,代码结构如下
class BaseA
{
public:
BaseA() { cout << "new BaseA " << endl; }
virtual ~BaseA() {};
int m_aa;
};
template< typename T>
class BaseB
{
public:
BaseB(){cout << "new BasBe " << endl;}
virtual ~BaseB(){}
void Test()
{
Func(this);
}
private:
void Func(void* pObj)
{
T* pThis = (T*)(pObj);
pThis->Run();
}
int m_bb;
};
class Drive: public BaseA, public BaseB<Drive>
{
public:
Drive()
{
m_cc = 5;
cout << "new Drive " << endl;
}
virtual ~Drive(){ }
void Run(bool bl=true)
{
cout << "m_cc = " << m_cc << endl;
}
int m_cc;
};
(2)调用方法
Drive* pDrive = new Drive();
pDrive->Test();