文章 "MQL5 中对象创建和析构的顺序" - 页 3 123 新评论 Arturo Hugo Ninamango 2022.08.15 02:43 #21 在文件localvar_testscript_4.mq5 中 如果在调用 GetPointer() 之后打印指针类型,就会发现指针是POINTER_AUTOMATIC,而不是POINTER_ DINAMIC。 m_array[i]=GetPointer(array[i]); Print(EnumToString(CheckPointer(m_array[i]))); //POINTER_AUTOMATIC 不是 POINTER_DINAMIC 因此,这一行永远不会被执行 if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]); Evgeniy Chernish 2023.10.04 18:49 #22 <quote. 在这个声明顺序中,items_ array 在 数组 [5] 被 销毁之前 被 销毁。在从items_array 销毁器调用的 Destroy() 函数中,工作是通过指向仍然存在的对象的指针完成的,因此不会发生错误。 大家好! 这是我完全不理解的逻辑。=) 毕竟,在 Destroy 方法中,我们将指针的类型与动态类型进行了比较。而我们的类型是自动的。因此,没有使用删除操作符。 但这并不是必须的,因为自动创建的对象会被自动删除。 最后,在类外方法的实现阶段,文件忘记为 Destroy 和 SetArray 方法指定返回值 void 的类型,因此会出错。 新手(比如我)可能会被吓到 =) void CItemArray::Destroy(void) { for(int i=0;i<ArraySize(m_array);i++) { if(CheckPointer(m_array[i])!=POINTER_INVALID) { if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]); } else Print("Invalid pointer to delete"); } } 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在文件localvar_testscript_4.mq5 中
如果在调用 GetPointer() 之后打印指针类型,就会发现指针是POINTER_AUTOMATIC,而不是POINTER_ DINAMIC。
因此,这一行永远不会被执行
<quote.
在这个声明顺序中,items_ array 在 数组 [5] 被 销毁之前 被 销毁。在从items_array 销毁器调用的 Destroy() 函数中,工作是通过指向仍然存在的对象的指针完成的,因此不会发生错误。
大家好!
这是我完全不理解的逻辑。=)
毕竟,在 Destroy 方法中,我们将指针的类型与动态类型进行了比较。而我们的类型是自动的。因此,没有使用删除操作符。
但这并不是必须的,因为自动创建的对象会被自动删除。
最后,在类外方法的实现阶段,文件忘记为 Destroy 和 SetArray 方法指定返回值 void 的类型,因此会出错。
新手(比如我)可能会被吓到 =)