2012-12-02 30 views
3

我這個做了很多在Java中...返回從函數的std :: string可能會拋出異常

String something = "A default value."; 
try { 
    something = this.aFunctionThatMightThrowAnException(); 
} catch (Exception ignore) { } 
this.useTheString(something); 

現在我試圖找到std::string等效的方法。以下是我有...

std::string something("A defualt value."); 
try { 
    something = this->aFunctionThatMightThrowAnException(); 
} catch (const std::exception& ignore) { } 
this->useTheString(something); 

爲了完整起見,這裏是aFunctionThatMightThrowAnException()可能是什麼樣子......

std::string MyClass::aFunctionThatMightThrowAnException() { 
    /* Some code that might throw an std::exception. */ 
    std::string aString("Not the default."); 
    return aString; 
} 

我對C++版本三個問題:

  • 這是對這種問題的接受方法嗎?或者更常見的做法是將something作爲參考傳入aFunction
  • 我的任務是something作爲從aFunction...返回的安全嗎?特別是最初分配給"A default value."的內存是否已發佈?
  • 在引發異常的情況下,我看不到副作用嗎?
+1

'趕上(...)'是更普遍的;它會捕捉任何東西,這在這裏看起來很合適。 –

+0

@Pete:我不知道......該函數被稱爲'aFunctionThatMightThrowAnException',而不是'aFunctionThatMightThrowAValueOfAnyTypeWhatsoever'。 –

+0

@LightnessRacesinOrbit - 如果目標是捕獲所有異常,我不會看到僅捕獲某些類型的異常。 –

回答

6

這是一個被接受的方法來解決這類問題嗎?

是的。

或者更常見的做法是將某些東西傳遞給函數作爲參考?

是我分配到的東西從機能缺失回...安全嗎?特別是最初分配給「默認值」的內存。釋放?

是的。

有沒有副作用我看不出在這種情況下引發異常?

+0

我真的很喜歡你的網站的設計。 –

+0

好,謝謝。 –