2012-05-28 26 views
0

我有一個通過引用傳遞的另一個對象構造的對象。這是傳遞給構造函數的對象看起來是這樣的:檢查指向自定義類的指針是否不再存在

HTTPServerResponse::HTTPServerResponse(Poco::Net::HTTPServerResponse &response) 

我的包裝類(HTTPServerResponse)毀壞response在某些時候,但它不也毀滅自己。實際上,有多種(外部)原因可能導致response被破壞,即使是在我的課外。

我想要的是在調用response的任何其他方法之前檢查它的存在。

我嘗試:

if(!response) {... 

它生產error C2675: unary '!' : 'Poco::Net::HTTPServerResponse' does not define this operator or a conversion to a type acceptable to the predefined operator;當然,我也試過:

if(response) {... 

這也未能與error C2451: conditional expression of type 'Poco::Net::HTTPServerResponse' is illegal; No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

如何解決這個爛攤子?

+0

請改用指針嗎? – Pubby

+3

您無法知道對象是否被刪除/釋放。考慮做出更好的設計。 – Dani

+0

@Pubby你能否提供一個例子作爲答案? –

回答

0

我最終保持整個線程繁忙,防止刪除對象直到我完成它。我知道,這是個重大的問題,但它爲我節省了所有必須重新編碼整個代碼的麻煩。

2

您永遠無法知道您指向的參考或指針是否無效(請參閱Why don't I need to check if references are invalid/null?)。

您只需要小心(並清楚)誰擁有引用/指針以及誰應該刪除它。爲了幫助您獲得所有權,您可以使用std :: unique_ptr或std :: shared_ptr(在C++ 0x中,否則使用boost版本)。

+0

如果我嘗試在'try {} catch(){}'語句中引用它,您能否請解釋爲什麼我的應用程序仍然崩潰? –

+1

沒有通用/自動的方法來檢測引用是否仍然指向有效的對象。語言運行時也不能這樣做。那麼誰應該拋出你想要捕捉的異常呢? – reima

+0

由於訪問懸掛指針/引用是未定義的行爲,並且沒有引發異常。請參閱http://stackoverflow.com/questions/1823721/how-to-catch-the-null-pointer-exception –

0

您是否真的需要知道對象是否存在?閱讀有關接收器設計模式。這是在Boost Asio中常用的。如果你正在使用指針,你必須記住刪除後刪除指針等...嘗試與smart_ptr的。

對我來說,很難想象爲什麼你需要檢查指針是否仍然存在。你的代碼有一個設計問題。

+0

我正在盡我所能修復停用的框架... –

相關問題