[英]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 ++之間畫線。
如果函數的返回類型是指針,則可以返回空指針。
如果調用者檢查返回值並處理返回值為null的情況 - 那么應該沒有任何問題。 如果調用者試圖取消引用該指針,則會發生問題。
函數返回指針的事實並不一定意味着開發人員需要釋放內存。 指針可以指向任何東西,包括堆棧和全局變量。 開發人員應該查看函數的文檔,以確保如何處理返回值。 無論如何,刪除空指針沒有問題,但是,如果她/他需要在第一個位置解除分配,應該看看。
我可以簡單地返回一個NULL-Ptr嗎?
是
這樣做會遇到問題嗎?
只有當您嘗試在該指針上調用方法時,這將是未定義的行為。
我是否必須再次釋放該指針?
不,在NULL
指針上使用delete
或free
是有效但不必要的。
我認為你的問題一般都已得到解答,但是......要小心。 我對XMLDocumentWrapper類一無所知。 在手邊,我希望調用者必須清理(刪除)這個返回的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.