C ++:另一个'检查指针是否为空'

时间:2014-01-15 16:44:38

标签: c++ pointers inheritance null compare

我知道,有很多这样的问题。如何检查指针是否为NULL。 我在这里和外面做过这方面的研究,找到了一些相当不错的答案,但显然它们对我不起作用。

我有这个结构:

myModule.h

class myModule
{
  public:
    myThing *in;
    myThing *out;

    virtual ~myModule() {}
    virtual myModule& bind(myModule &m) = 0;
};

myThing.h

class myThing
{
  public:
    myThing() {}

    node *get_node() { return &n; }

    signal *get_signal() { return &s; }

  private:
    node n;
    signal s;
};

mySubModule.h

class mySubModule : public myModule
{
  public:
    virtual ~mySubModule() {}
    virtual myModule& bind(myModule &m)
    {
      // Here comes the 'checkpoint'
      if(!in)
         in = new myThing();
      in.doSomething();
    }
};

myObject.h

class myObject : public mySubModule
{
  // This is the 'real' object that will call 'bind'
};

所以,当它通过'检查点'时,它总是指向某个东西,所以它永远不会进入'如果'。我猜它是关于继承的东西,因为编译器不知道myThing是什么或者什么,但是让'检查点'工作真的很好。我尝试将myThing *in, *out初始化为NULL,但它不起作用。

另外,由于myModule函数,接口virtual可能存在问题。我不确定这是否正确。可能是原因吗?

如果有人提出想法,那就太棒了。

修改

我刚才意识到有一个错字。 “检查点”错误,它是if(!in)而不是if(!myThing)

我对此检查点的意图是检查对象(myThing *in)是否为NULL。如果是NULL,我会初始化它。如果不是,我会用它。

我已经尝试过这个:

class myModule
{
  ...
  myModule()
  {
    in  = NULL;
    out = NULL;
  }
  ...
}

但它不适合我。 if(!in)if(in == NULL)正在返回false

我应该在myObject构造函数中初始化它吗?我不能在父构造函数中执行此操作吗?

非常感谢:)

3 个答案:

答案 0 :(得分:1)

您需要在构造函数中初始化in,out。

顺便说一句,if(!myThing)甚至不会编译,因为 myThing 在任何地方都被声明或定义。

答案 1 :(得分:1)

检查指针是否为空 - 只要检查指针是否为空(如果(ptr == NULL)...

请记住,指针在声明时不为null,因为它不会进行自我初始化。所以如果你真的想检查一个NULL指针,你应该把它设置为NULL。

顺便说一句: 我建议你去使用c ++引用,这样更安全。 问候

答案 2 :(得分:0)

许多人回答说,有必要在myThing的构造函数中将NULL个对象初始化为myObject,而不是在父级中。然后,if(!in)if(in == NULL)都可以使用。

谢谢!