我可以 return C++ 方法中的 NULL 指针吗?

Can I return a NULL-Pointer in a C++ method?

在我的代码中,我使用了一个方法 getNumberOfP_ForAdd()。此方法打开一个文件和 returns 一个 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;
}

当我尝试读取文件时,我首先检查两件事:天气

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

(inputDoc == NULL)

如果这些陈述属实,我会

return NULL;

我可以简单地 return 一个 NULL-Ptr 还是我 运行 这样做会遇到问题? 我必须再次释放该指针吗?

Can I simply return a NULL-Ptr?

Would I run into problems in doing so?

只有当您尝试调用该指针上的方法时,才会出现未定义行为。

Do I have to free that pointer again?

不,在 NULL 指针上使用 deletefree 是有效但不必要的。

你可以return一个NULL指针。

Do I have to free that pointer again?

delete 仅当您在免费商店分配 space 时才需要。

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

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

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

  3. 函数 return 是一个指针这一事实并不一定意味着开发人员需要释放内存。指针可以指向任何东西,包括堆栈和全局变量。开发人员应该查看函数的文档以确定如何处理 return 值。无论如何,删除空指针没有问题,但同样,应该首先查看 she/he 是否需要释放某些东西。

我认为您的问题大体上已得到解答,但是...请注意。 我对 XMLDocumentWrapper class 一无所知。另一方面,我希望调用者必须清理(删除)这个返回的指针。