我有一个外部组件给出了一个对象,让我们说A. 代码中的某处我有:
A *p;
ObjContainer *pBigOne;
...
p = pBigOne->GetAPointerToSomethinOfTypeA();
现在,在A中,有一个受保护的方法(让我们使用一些想象力并假设它名为ProtectedMethod())我想要调用它,但显然我不能。 为了解决这个问题,我写了一个类B如下:
// B.h
class B : class A
{
public:
B();
~B();
bool MyMethodIWantToCall();
}
// B.cpp
B::B(){}
B::~B(){}
bool B::MyMethodIWantToCall()
{
return ProtectedMethod();
}
更改上面的代码:
B *p;
ObjContainer *pBigOne;
...
p = (B *)pBigOne->GetAPointerToSomethinOfTypeA(); // (*)
p->MyMethodIWantToCall();
我能够得到我想要的东西,但是一位同事向我指出这可能会导致一些记忆错误,因为B大于A。为了确认这一点,我们在B中添加了一个成员,将其初始化为某些东西并使用VS2010手表进行检查。在VS2005中,未初始化的变量以84 ** ...的值开头,这里我们得到一个非常随机的变量。
所以,我有两个问题: 1)当我在(*)时,我为什么要演员?不应该是同一类型? 2)我的解决方法绝对安全吗?
修改
3)有最安全的方法吗?