我有一个带有静态指针成员的基类。当我在派生类中分配该静态指针成员时,该静态成员在从基类的方法引用时显示为 NULL。
这不是我所期望的行为。无论从哪里访问静态指针成员,不应该仍然分配它吗?我对预期的行为有误吗?
静态成员是指向基类的指针。我意识到我想要实现的目标可能最好通过使用模板的静态多态性(静态多态性定义和实现)来完成,但我仍然不明白为什么在这种情况下指针成员本身为 NULL。
编辑:此 SSCE 中未演示该行为。哪些错误或常见错误会导致我描述的行为?我的实际生产场景比这复杂得多,但结构几乎完全相同。我实际上是在 VS2010 调试器中观察Base::staticMember == not null
,然后调用,Base::staticMethod()
并且内部为空。我很困惑。Base::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();
}