簡體   English   中英

我可以在C ++方法中返回NULL指針嗎?

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

在我的代碼中,我使用方法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,或者我會遇到問題嗎? 我是否必須再次釋放該指針?

您可以返回NULL指針。

我是否必須再次釋放該指針?

只有在免費商店中分配空間時才需要delete

但是,如果您使用C ++ 11或更高版本,我建議使用nullptr而不是NULL 在這個特定的代碼中,它沒有提供顯着的改進,但我認為它是好的風格,也是在C和C ++之間畫線。

  1. 如果函數的返回類型是指針,則可以返回空指針。

  2. 如果調用者檢查返回值並處理返回值為null的情況 - 那么應該沒有任何問題。 如果調用者試圖取消引用該指針,則會發生問題。

  3. 函數返回指針的事實並不一定意味着開發人員需要釋放內存。 指針可以指向任何東西,包括堆棧和全局變量。 開發人員應該查看函數的文檔,以確保如何處理返回值。 無論如何,刪除空指針沒有問題,但是,如果她/他需要在第一個位置解除分配,應該看看。

我可以簡單地返回一個NULL-Ptr嗎?

這樣做會遇到問題嗎?

只有當您嘗試在該指針上調用方法時,這將是未定義的行為。

我是否必須再次釋放該指針?

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

我認為你的問題一般都已得到解答,但是......要小心。 我對XMLDocumentWrapper類一無所知。 在手邊,我希望調用者必須清理(刪除)這個返回的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM