2017-07-12 41 views
-6

我在Xcode中編寫代碼C++代碼。在一個實例中,我確保所有字段都是有效的。我應該檢查「std :: string.c_str」是否爲NULL?

SomeClass *myclass = new SomeClass(); 
std::string myString; 

if ((myClass) && (myString.c_str)) { 
return true; 
} else { 
return false; 
} 

我應該檢查testString.c_str嗎?這有意義嗎?

+1

它沒有任何意義。 'std :: string'作爲特定​​的API來測試對象的各種語義狀態。 – StoryTeller

+5

第一個檢查也沒有意義,'new'運算符永遠不會返回空指針。 –

+3

另外'myString.c_str'不是一個有效的表達式。 – StoryTeller

回答

1

new()運算符的默認行爲是返回新對象,或者在內存分配失敗時拋出異常。所以,你不需要檢查myClass是否爲NULL,除非你設置標誌來改變行爲或爲你的類實現你自己的new()運算符。

此外,myClass附近的額外括號是沒有必要的。一個更好的方式來表達你要檢查是

if ((myClass != nullptr) && 

然後呢,你目前正在測試,如果在std::string類中的方法c_str()的地址不爲空。我想,不想你想做。
首先,您需要編寫myString.c_str()。然後,這個方法永遠不會返回一個NULL指針,它可以返回的是一個空的C字符串。但是,這是更好地與std::string::empty()測試,你的支票應該是這樣的:

if (myString.empty()) { 
return false; 
} else { 
return true; 
} 

這當然可以被縮短到

return !myString.empty(); 

最後:如果你有一個函數/方法的代碼:誰刪除你的新的SomeClass對象?

+0

SomeClass對象作爲參數傳遞給驗證方法。那麼我也需要照顧這一點嗎?我正在研究Xcode。 –

+0

那麼,也許你應該刪除C++標記,然後......我不知道Objective-C,在C++中,你必須刪除自己用new()創建的對象。 – Rene

相關問題