#include <iostream>
using namespace std; class A
{
private:
void* pObject;
public:
A()
{
pObject = this;
cout<<"A: pObject = "<<pObject<<endl;
}
void* GetObjectPtrFromA(){return pObject;}
}; class B
{
private:
void* pObject;
public:
B()
{
pObject = this;
cout<<"B: pObject = "<<pObject<<endl;
}
void* GetObjectPtrFromB(){return pObject;}
}; class F:public B, public A
{
private:
void* pObject;
char* p;
public:
F()
{
pObject = this;
cout<<"F: pObject = "<<pObject<<endl;
}
void* GetObjectPtrFromF(){return pObject;}
void AllocateMemoryF()
{
cout<<"调用AllocateMemoryF函数"<<endl;
p = new char[1024*1024*1024];
}
void FreeMemoryF()
{
cout<<"调用FreeMemoryF函数"<<endl;
delete[] p;
}
}; int main()
{
F f;
F* pf;
pf = (F*)f.GetObjectPtrFromA();
pf->AllocateMemoryF();
pf->FreeMemoryF();
}
那不是你的程序的错,调用NEW操作符时,有可能是要失败的,如果你申请的空间太大,有可能就要失败的。
这句话有点迷惑
将A的对象指针this 强制转换为F的?为什么 会有后遗症吗?
高手说说
to goodboyws(深夜不眠者):
申请一个字节也出错,除非不申请。
-----------------
to laolaoliu2002(老刘):
我用的就是VC6.0编译器。
另一:
pf = (F*)f.GetObjectPtrFromA();
取得的是A在F中的指针
这个指针并不完全等于F,看你多重继承的顺序
如果
class F:public B, public A
换为
class F:public A, public B
应该可以解决!