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** の値で始まります。ここでは、非常にランダムな値を取得しています。

そこで、2 つの質問があります: 1) (*) にいるとき、なぜキャストしなければならないのですか? 同じタイプじゃないの?2) 私の回避策は間違いなく安全ですか?

編集

3) これを行う最も安全な方法はありますか?

4

0 に答える 0