我有一個代碼,我使用指針訪問某些數據塊。在一些罕見的情況下,數據塊的一些成員是空的,結果指針變得懸空。實際上,我得到了正確的指針,但是當試圖用指針做某事時,程序崩潰了。有什麼辦法檢查指針是否懸空?
通常的建議是避免使用這種類型。但令人遺憾的是,我使用的框架要求我使用這種類型的數據訪問方法。
有沒有一種方法可以在對其進行任何操作之前「檢查」指針是否無效?顯然,檢查指針是否不等於NULL不起作用。我也試過這個:
try
{
CString csClassName = typeid(*pMyPointer).name(); // Check error condition
// The line below fails due to dangling pointer (data block is not valid).
hr = pMyPointer->MyPointerMethod();
}
catch(bad_typeid)
{
return E_FAIL;
}
catch(...)
{
return E_FAIL;
}
這是正確的方法嗎?
我的指針應該是靜態的類..它仍然很好如果我使用智能指針? – Nikhil
這完全沒有問題。您需要注意線程安全問題,但這對於智能指針與原始指針來說沒有什麼不同。 –
我不認爲這很重要。唯一令我困擾的是,你的框架本身是否可以讓你的指針在沒有任何預先通知的情況下懸擺。請參閱,您必須從智能指針中提取原始指針並將其傳遞到您的框架。如果它保證指針在調用後仍然有效,或者如果它會變得無效就會被通知 - 很好,請繼續。 – Septagram