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

use*_*063 2 c++ null qt 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;
}
Run Code Online (Sandbox Code Playgroud)

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

(fileName.isNull() || fileName.isEmpty())
Run Code Online (Sandbox Code Playgroud)

(inputDoc == NULL)
Run Code Online (Sandbox Code Playgroud)

如果这些陈述是真的,我会这样做

return NULL;
Run Code Online (Sandbox Code Playgroud)

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

cad*_*luk 6

你可以返回一个NULL指针.

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

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

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

  • @Downvoter downvote的原因,好吗? (5认同)

Dav*_*aim 6

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

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

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

  • 如果它没有"找到"要返回的任何好元素,它可能返回null.你不能用简单的参考 (2认同)

Tar*_*ama 5

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

我这样做会遇到问题吗?

仅当您尝试在该指针上调用方法时,这才是不确定的行为。

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

不,使用deletefreeNULL指针上有效,但不必要。

  • @downvoter我说的话不对吗? (4认同)