首页 / 交易学院 / MQL5 对象生命周期:创建与析构顺序
MQL5 对象生命周期:创建与析构顺序
🔁

MQL5 对象生命周期:创建与析构顺序

全局/局部/动态三类对象的创建与析构规则与避坑

MQL5 编程 难度 · 进阶 2026-07-15 10 分钟阅读
#MQL5#OOP#对象#析构#内存

MQL5 基于面向对象编程,对象分全局、局部、动态三类,析构都按“与构造相反”的顺序。理解这套规则,是写出不漏内存、不崩盘的 EA 的基础。

一、三类对象的创建与析构

二、全局与局部的统一规则

无论全局还是局部,析构都按与构造相反的顺序进行;若某程序块没执行(如 input 开关为 false),里面的局部对象根本不会被创建。

✦ 查错口诀
记住“构造顺序=声明顺序,析构顺序=反着来”,遇到 undeleted objects 或 invalid pointer 日志时,先对照这个规则查。

三、动态对象的责任在你

四、指针数组的坑

多个指针数组指向同一 new 对象时,只能删一次,第二次删报无效指针;漏删则日志报 N undeleted objects left。

⚠ 声明顺序影响安全
若含指针数组的类对象先于原数组对象声明,它析构时原数组已没,指针失效。调换声明顺序即可避免。

五、组合类的正确姿势

常见问题

这是 OOP 通用约定,保证依赖关系安全——后构造的可能依赖先构造的,所以先拆后者。
MQL5 退出时会回收,但日志会报警 undeleted objects left;长期运行的 EA 若反复 new 不删才会真泄漏。
区分 POINTER_DYNAMIC / POINTER_INVALID,删除前调用它判断,避免删到无效或已删指针导致崩溃。
只在一个地方负责 delete,另一个指针置空或标记不拥有,防止重复删除。
会。组合类里若持有指针成员的类先析构、而它指向的原对象已先被析构,就会访问失效指针;调顺序是最简单的修法。