在我的代码中,我使用方法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,还是会遇到问题? 我是否必须再次释放该指针?
答案 0 :(得分:6)
您可以返回NULL
指针。
只有在免费商店中分配空间时才需要我是否必须再次释放该指针?
delete
。
但是,如果您使用的是C ++ 11或更高版本,我建议使用nullptr
代替NULL
。在这个特定的代码中,它并没有提供显着的改进,但我认为它很好,也可以在C和C ++之间划清界限。
答案 1 :(得分:5)
如果函数的返回类型是指针,则可以返回空指针。
如果调用者检查返回值并处理返回值为null的情况 - 那么应该没有任何问题。如果调用者试图取消引用该指针,则会出现问题。
函数返回指针的事实并不一定意味着开发人员需要释放内存。指针可以指向任何东西,包括堆栈和全局变量。开发人员应该查看函数的文档,以确保如何处理返回值。无论如何,删除空指针没有问题,但是,如果她/他需要在第一时间解除分配,应该看看。
答案 2 :(得分:4)
我可以简单地返回一个NULL-Ptr吗?
是
这样做会遇到问题吗?
只有当您尝试在该指针上调用方法时,这将是未定义的行为。
我是否必须再次释放该指针?
不,在delete
指针上使用free
或NULL
有效但不必要。
答案 3 :(得分:0)
我认为你的问题一般都已得到解答,但是......要小心。 我对XMLDocumentWrapper类一无所知。在手边,我希望调用者必须清理(删除)这个返回的指针。