我知道,有很多这样的问题。如何检查指针是否为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'
};
因此,当它通过“检查点”时,它始终指向某物,因此它永远不会进入“ if”内部。我猜想它与继承有关,因为编译器不知道什么是
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
构造函数中初始化它吗?我不能在父构造函数中执行此操作吗?非常感谢 :)
最佳答案
您需要在构造函数中初始化in,out。
顺便说一句,if(!myThing)甚至不会在任何地方声明或定义myThing时进行编译。