我有一個類的結構是這樣的:期望程序員在引發異常後刪除對象是否合理?
class Server
{
private:
SOCKET listener;
public:
Server(char const * const address, unsigned short int port);
~Server();
void Start();
};
有依靠圖書館的用戶delete
對象如果Start
方法罰球CreateIoCompletionPort
或listen
在通話中說,一個異常的方法嗎?
有點主觀我知道,但是對於這種情況有沒有最佳做法?
我想要避免重複清理代碼,並可能導致雙重釋放資源的問題,並增加了複雜性,還必須跟蹤清理和不清理的內容。
編輯
要清除了一些問的問題,我指的是,當我的代碼,用戶將創建Server
類的一個實例。我試圖決定是否應該通過在Start
內遇到異常來保護班級在無效狀態下執行的路線。如果Start
方法由於某個問題而失敗,那麼這是一個不可恢復的錯誤,並且該類處於不良狀態,並且無法繼續。這可能類似於配置錯誤或系統級錯誤,阻止Start
成功,但同時使SOCKET
處於無法關閉並創建新套接字的情況下無法恢復的狀態。
這將是非常異常安全的代碼,是不好的做法。 – Rapptz
我對你依賴用戶「刪除」的對象有點不清楚。它是「服務器」的一個實例嗎?如果是這樣,那麼確保在發生異常時不泄漏對象由用戶決定,並且他應該使用智能指針來保存「服務器」實例(假設他需要動態分配它在第一名)。 – Praetorian
我知道這可能不是你想要做的,但你不必重複任何代碼;只需添加一個'Cleanup()'方法(它甚至不必是'public'),並且你的字段最初是NULL,所以你可以檢查它們是否被設置。 – andlabs