派生类MFC C ++中的内存分配

时间:2013-09-26 13:07:06

标签: c++ visual-studio-2010 memory-management mfc

我有一个外部组件给出了一个对象,让我们说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)有最安全的方法吗?

0 个答案:

没有答案