如何测试是否已分配父指针?

时间:2011-12-20 19:38:37

标签: c++

我有一个reset()函数,它会遍历一堆数据并重置它。其中一个是指向自定义类的指针,比方说Apple *a;

Apple类有vector<Seed *>个对象,方法resetSeeds()可以通过并重置它们。

如果在分配reset()之前调用了a,我不希望resetSeeds迭代其Seed个对象,因为这些对象尚未分配。我该怎么做?

3 个答案:

答案 0 :(得分:1)

a设置为NULL以开始。然后,在reset()中,如果a->resetSeeds()不为NULL,则只调用a

class Foo
{
private:
    Apple* a;

public:
    Foo() : a(NULL) { }

    void reset()
    {
        if (a != NULL) {
            a->resetSeeds();
        }
    }
};

如果您使用的是C ++ 11,请切换NULL,转而使用nullptr

答案 1 :(得分:1)

初始化初始化列表中的指针。这样它甚至在调用构造函数之前就已经设置了:

 class Worm
 {
      Apple *a;
      Worm() : a(0)
      {
           // a is 0
      }

      void setApple(Apple *_a)
      {
           a = _a;
      }

      void eat(void)
      {
           if(a)
                a->chew();
      }
 }

答案 2 :(得分:0)

在其声明中将a设置为NULL,或者在相关构造函数中将其设置为实例字段,并在使用之前检查NULL

我认为最好保留任何可到达的无效指针NULL,并在使用之前检查NULL的任何指针。