静的ポインタメンバーを持つ基本クラスがあります。派生クラスでその静的ポインターメンバーを割り当てると、基本クラスのメソッドから参照されると、その静的メンバーはNULLになります。
これは私が期待する動作ではありません。アクセス先に関係なく、静的ポインタメンバーを割り当てる必要はありませんか?期待される動作について間違っていますか?
静的メンバーは、基本クラスへのポインターです。私が達成しようとしていることは、おそらくテンプレートを使用した静的ポリモーフィズム(静的ポリモーフィズムの定義と実装)によって最もよく達成されることを理解していますが、このシナリオでポインターメンバー自体がNULLである理由はまだわかりません。
編集:このSSCEでは動作は示されていません。私が説明する動作の原因となるバグや一般的なエラーは何ですか?私の実際の制作シナリオはこれよりもかなり複雑ですが、構造はほとんど同じです。私は文字通りVS2010デバッガーを監視していBase::staticMember == not null
て、を呼び出してBase::staticMethod()
、内部がnullBase::staticMethod()
になっています。Base::staticMember
私は困惑しています。
#include <iostream>
class Base {
public:
static Base *staticMember;
static void baseMethod();
};
Base *Base::staticMember = NULL;
class Derived : public Base {
public:
void derivedMethod();
};
void Base::baseMethod() {
// here staticMember == NULL, the unexpected behavior
if(staticMember == NULL) {
std::cout << "NULL";
} else {
std::cout << "NOT NULL";
}
};
void Derived::derivedMethod() {
staticMember = new Derived();
}
int main(int argc, void *argv[]) {
Derived *derived = new Derived();
derived->derivedMethod();
Base::baseMethod();
}