0

我有一个提供对象的外部组件,比如说 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)有没有最安全的方法来做到这一点?

4

0 回答 0