C++ 无法将 NULL 指针设置为包含对象的静态变量?

标签 c++ static null

提前致歉,因为我什至不确定如何表达这个问题,但我正在做家庭作业(这个问题与它无关,只是我在做作业时遇到了问题)并且遇到了某些问题(这只是一个提取和概括,我遗漏了析构函数等...):

class idType {
    int _id;
  public:
    int getID() { return _id; }
    idType(int in = -1) : _id(-1) {}
};


class Foo {
    static int _count;
    idType* _id; //int wrapper just for examples sake
  public:
    Foo() { _id = new idType(_count); ++_count; }
    idType* getID() { if(_id) return _id; return NULL; } //ERROR WHEN CALLED FROM BELOW
};

class Bar {
    Foo* _foo;
  public:
    Bar(Foo* foo = NULL) : _foo(foo) {}
    Foo* getFoo() { if(_foo) return _foo; return NULL; }
};

int foo::_count = 0;

int main() {
    Bar BAR;
    if(BAR.getFoo()->getID() && BAR.getFoo()); //RUN TIME ACCESS VIOLATION ERROR
    return 0;
};

正如我所提到的,这不是我正在使用的代码,但我相信它可以更清楚地识别正在发生的事情。 BAR 通过了 getFoo() 检查,所以 _foo 不是(?)NULL 但 getFoo()->getID() 在 if(_id) 处出错。

静态变量是否以某种方式阻止了指向该类类型的指针的任何 NULL 实例的存在? 我一开始问这个的原因是因为当我在我原来的程序中注释掉静态变量行时,程序运行正常。但是,在尝试此代码(或多或少地模拟了我正在做的事情)之后,删除静态变量行没有任何区别,它仍然会出错。

这可能很简单,但我不知道哪里出了问题。非常感谢您的帮助。

最佳答案

在使用之前检查指针。

int main() 
{
  Bar BAR;
  Foo *pFoo = BAR.getFoo();
  if (pFoo && pFoo->getID())
  {
    // do something
  }
  return 0;
};

关于C++ 无法将 NULL 指针设置为包含对象的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599514/

相关文章:

c++ - 初始化具有大小的结构 vector 时出错

c++ - 静态函数调用错误 "C++ requires a type specifier for all declarations"

java - 使用输入流从 XML 文件读取属性?

mysql - 处理选择查询mysql上的空值

java - 如何在 JUnit @Parameters 中将 null 作为参数传递?

c++ - 在构造函数中限制可变参数模板的可接受方式

c++ - 如果顶点属性是指针,如何使用 boost::graph dijkstra 算法?

c++ - ThreadSanitizer 报告的数据竞争

java - 如何在android中正确声明静态变量?

ruby - 将变量分配为方程式的输出,如果方程式无法运行,则将其分配为nil(绕开NoMethodError)