我知道,有很多这样的问题。如何检查指针是否为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
构造函数中初始化它吗?我不能在父构造函数中执行此操作吗?
非常感谢:)
答案 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)
都可以使用。
谢谢!