出于某种需求,程序往往需要将堆里申请对的对象的指针保存到某个地方以便快速查找对象。
比如,mfc的控件大多提供SetItemData(DWORD_PTR)这样一个接口用以关联控件item数据。
但由于某种需求原因,导致指标所指向的对象可能在item不知情的情况下被释放,这时保存起来的指标依然指向已被释放的原地址(而非null),这时
if(point)
{
}
是无法判断对象是否存在的。
例:
class A
{
};
A *a1 = new A;
A *a2 = a1;//a2是被保存起来的指针
//some where
delete a1;
a1 = NULL;
此时a2对于对象是否存在一无所知
if(a2)无效判断。
暂时想到的方法是在有这种需求的类里添加一个静态set
构造时加到set(或者提供静态方法来生成对象)
析构时从set删除。