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

C++: Another 'check if pointer is null'

本文关键字:是否 指针 检查 另一个 C++      更新时间:2023-10-16

我知道,有很多这样的问题。如何检查指针是否为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,但它不起作用。

另外,由于virtual的功能,接口myModule可能有问题。我不确定那是正确的。这可能是原因吗?

如果有人想出一个主意,那就太棒了。

编辑

我刚刚意识到有个打字错误。"检查点"错误,它是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在任何地方声明或定义。

检查指针是否为null-只需检查指针是否是null if(ptr==null)。。。

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

顺便说一句:我建议你使用一个带有c++引用的,这样更安全。关于

正如许多人所回答的那样,有必要在myObject的构造函数中将myThing对象初始化为NULL,而不是在父对象中。然后,if(!in)if(in == NULL)都工作。

谢谢!