我有一个reset()
函数,它会遍历一堆数据并重置它。其中一个是指向自定义类的指针,比方说Apple *a
;
Apple
类有vector<Seed *>
个对象,方法resetSeeds()
可以通过并重置它们。
如果在分配reset()
之前调用了a
,我不希望resetSeeds
迭代其Seed
个对象,因为这些对象尚未分配。我该怎么做?
答案 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
的任何指针。