我有一个代码,我使用指针访问某些数据块。在一些罕见的情况下,数据块的一些成员是空的,结果指针变得悬空。实际上,我得到了正确的指针,但是当试图用指针做某事时,程序崩溃了。有什么办法检查指针是否悬空?
通常的建议是避免使用这种类型。但令人遗憾的是,我使用的框架要求我使用这种类型的数据访问方法。
有没有一种方法可以在对其进行任何操作之前“检查”指针是否无效?显然,检查指针是否不等于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