我只是有一個困境,當函數可能失敗時,我應該如何從函數返回智能指針。我可以挑選以下選項之一:最佳實踐 - 從函數返回指針
- 返回指針,並拋出異常,如果函數失敗:
std::shared_ptr foo() { // ... if (!ok) throw; return ptr; }
- 返回指針,並返回空指針如果函數失敗
- 通行證指針,和返回布爾標誌
std::shared_ptr foo() { // ... if (!ok) return std::shared_ptr(); return ptr; }通過引用
bool foo(std::shared_ptr& ptr) { // ... if (ok) ptr = ...; return ok; }
是否有任何的最佳實踐,指導方針,如何報告,該函數沒有正確執行呢?或者它通常是項目特定的?
感謝您的回答
Ve ry相關:[檢索方法是否應該返回'null'或拋出異常時,它不能產生返回值?](http://stackoverflow.com/q/175532/3425536) – emlai
任何答案將是高度意見爲主。但是,無論是否有人同意你的決定**只要確保行爲記錄**。 –
不要使用#3,#1更好;它不會讓調用者忘記處理錯誤。 #2是好的,因爲調用者必須檢查null。像往常一樣,這些都不是硬性規則,因爲有時你的環境會施加額外的限制(例外太慢/不存在等) – GManNickG