求对象被删除后导致运行错误的解决方案

 
// 测试对象
class clsA{
public:
   void a(){
      Print("a");
   }
};

void OnStart() {
   clsA *A = new clsA(); 
   delete A;
   // A=NULL , 这里只是简单的例子,可以通过主动设置NULL来解决,但在复杂的应用内,对象的循环引用,很难直接设置某个对象为NULL
   if(A != NULL){ // 这里除了这种判断,还有什么方式可以判断对象已经不存在了?
      Print("A已经删除,但!=NULL条件依然成立,导致执行问题");
      A.a(); // A已经不存在,导致调用对象方法出错 ---> 	invalid pointer access in 'ClassDeleted.mq5' (24,7)
   }
}

1、但对象在其他逻辑中被删除,如何判断这个对象已经被删除或不存在了?

2、Mql5没有try catch,系统直接遇到运行错误,也不知道是执行到哪根K线出现的错误,调试起来也不方便,大家有没有遇到这样的困惑,有没有什么好的解决方案?

 

用这个CheckPointer

if(CheckPointer(A)!=NULL)
{
 
}
 
Ziheng Zhuang:

用这个CheckPointer

可行,非常感谢!

 
Jiayou Hu:

可行,非常感谢!

if(CheckPointer(A)!=POINTER_INVALID)
{
 
}
 
Jiayou Hu:

我一直没怎么搞明白,这种高深的复杂操作是干什么用解决什么问题的?

各位大佬能给举个栗子吗?

 
redmountain:

我一直没怎么搞明白,这种高深的复杂操作是干什么用解决什么问题的?

各位大佬能给举个栗子吗?

前面发的就是一个栗子啊,没看懂?

原因: