我可以在C ++方法中返回NULL指针吗?

时间:2015-10-20 08:47:45

标签: c++ qt null return

在我的代码中,我使用方法getNumberOfP_ForAdd()。此方法打开一个文件并返回XMLDocumentWrapper *。

XMLDocumentWrapper* Tab::getNumberOfP_ForAdd()
{
QString defaultName = GuiUtil::getLastPath();
QString fileName = QFileDialog::getOpenFileName(this, "Open " +  displayName + " File",
           defaultName, displayName     + " Files (*." + fileSuffix + ")", 0, 0);

if (fileName.isNull() || fileName.isEmpty()) {
    qDebug() << "Load" << displayName << "aborted.";
    return NULL;
}

GuiUtil::setLastPath(fileName);

// Open file
XMLDocumentWrapper* inputDoc = XMLDocumentWrapper::readFromFile(fileName);
if (inputDoc == NULL) {
    qDebug() << "Load" << displayName << "aborted.";
    return NULL ;
}

return inputDoc;
}

当我尝试阅读文件时,我首先检查了两件事:Wheather

(fileName.isNull() || fileName.isEmpty())

(inputDoc == NULL)

如果这些陈述属实,我会

return NULL;

我可以简单地返回NULL-Ptr,还是会遇到问题? 我是否必须再次释放该指针?

4 个答案:

答案 0 :(得分:6)

您可以返回NULL指针。

  

我是否必须再次释放该指针?

只有在免费商店中分配空间时才需要

delete

但是,如果您使用的是C ++ 11或更高版本,我建议使用nullptr代替NULL。在这个特定的代码中,它并没有提供显着的改进,但我认为它很好,也可以在C和C ++之间划清界限。

答案 1 :(得分:5)

  1. 如果函数的返回类型是指针,则可以返回空指针。

  2. 如果调用者检查返回值并处理返回值为null的情况 - 那么应该没有任何问题。如果调用者试图取消引用该指针,则会出现问题。

  3. 函数返回指针的事实并不一定意味着开发人员需要释放内存。指针可以指向任何东西,包括堆栈和全局变量。开发人员应该查看函数的文档,以确保如何处理返回值。无论如何,删除空指针没有问题,但是,如果她/他需要在第一时间解除分配,应该看看。

答案 2 :(得分:4)

  

我可以简单地返回一个NULL-Ptr吗?

  

这样做会遇到问题吗?

只有当您尝试在该指针上调用方法时,这将是未定义的行为。

  

我是否必须再次释放该指针?

不,在delete指针上使用freeNULL有效但不必要。

答案 3 :(得分:0)

我认为你的问题一般都已得到解答,但是......要小心。 我对XMLDocumentWrapper类一无所知。在手边,我希望调用者必须清理(删除)这个返回的指针。