怎么判断一个指向的对象是否被释放

如何判断一个指向的对象是否被释放
如下:
   
  TButton* A = new TButton(this);
  TButton* B = A;

  delete A;

  if (B == NULL)
  {
  ShowMessage("Null");
  }
  else
  {
  ShowMessage("Not Null");
  }


此时,B不等于NULL,程序执行 ShowMessage("Not Null"), 请问如何判断B指向的对象是否被释放,让程序执行ShowMessage("Null");

 

------解决方案--------------------
用一个很好阐述楼上所表达的意思

AnsiString sStr = 3;
AnsiString sTmp = sStr;

delete的是sStr,sTmp依然=3
如果sTmp指向的是&sStr,你删掉sStr,这个时候sTmp才为NULL

是这样吧.
------解决方案--------------------
楼主用
assert吧

TButton* A = new TButton(this);
TButton* B = A;

delete A;
assert(B);//加这一行,如果B为空,这一行后边的代码就不会被执行了。直接退出该层调用

//用了assert就不需要用下这的if去判断了

if (B == NULL)
{
ShowMessage("Null");
}
else
{
ShowMessage("Not Null");


------解决方案--------------------
如果指针在多个地方使用,比较好的习惯是在delete后将对象指针赋值为NULL.
------解决方案--------------------
使用指针引用,而不是指针可解决你的问题。就用你的代码做为例子说明:
C/C++ code

TButton* A = new TButton(this);
    TButton*& B = A;
    delete A;
    A = NULL;

    if (B == NULL)
    {
        ShowMessage("Null");
    }
    else
    {
        ShowMessage("Not Null");
    }

------解决方案--------------------
这是一个很值得挖掘的问题,在指针、内存及指针引用的使用方面非常具有教学研究意义

可惜啊

------解决方案--------------------
调用 delete A
是将A指针所指向的内存中的资源释放掉 ,
指针A仍然存在,这时A指针还是指向着该内存地址
所以加一句 A = NULL; 
可以避免一些内存错误,


------解决方案--------------------
探讨
调用 delete A
是将A指针所指向的内存中的资源释放掉 ,
指针A仍然存在,这时A指针还是指向着该内存地址
所以加一句 A = NULL;
可以避免一些内存错误,



------解决方案--------------------
1、通过组件查找, 组件的 Owner 必须是当前类
bool Exists = false;
for (int i = 0; i < ComponentCount; i++)
if (Components[i] == B)
Exists = true;

2、通过控件查找, 下例的控件的 Parent 是当前表单,在知道放在什么面板或页面等内时,请在该父控件下找,不知道放在哪里,可以采用枚举方式。

bool Exists = false;
for (int i = 0; i < ControlCount; i++)
if (Control[i] == B)
Exists = true;


3、很另类吧通过容错机制,但也值得一试。
//--------------------

if (B)
try
{
if (B->Visible);
}
catch ( EAccessViolation &E)
{
B = NULL;
}

ShowMessage( B ? "还在呢!" : "已经释放!");


------解决方案--------------------
路过,进来看看,学习。。。。。。。。。。。。。。。。。。。!
------解决方案--------------------
探讨
引用:调用 delete A 是将A指针所指向的内存中的资源释放掉 , 指针A仍然存在,这时A指针还是指向着该内存地址 所以加一句 A = NULL; 可以避免一些内存错误,
即使加了A = NULL;
delete掉A后,B的值还是不变,指向先前A的地址空间。较好的解决办法是使用指针引用,而不是复制指针。

------解决方案--------------------
delete 之后,一定要把所有指向这片内存的指针置NULL,可别出野指针呀。
------解决方案--------------------
好象搞复杂了,只要判断(B)就可以了:

TButton* A = new TButton(this);
TButton* B = A;

delete A;

if (B)