MQL5中的OOP问题 - 页 7 1234567891011121314...96 新评论 Igor Makanu 2019.07.05 08:25 #61 Dmitry Fedoseev: 如果事先知道对象的数量,并且在程序运行期间是恒定的,那么就不需要新建。在所有其他情况下,你需要新的。 不,这是我的例子https://www.mql5.com/ru/forum/160683/page861#comment_11840254 向构造函数传递参数很方便,如果用户改变了设置,在OnDeinit()中杀死该类,然后在OnInit()中用新的参数创建该类,这样会更快。 ;) Dmitry Fedoseev 2019.07.05 08:46 #62 Igor Makanu: 不,这是我的例子https://www.mql5.com/ru/forum/160683/page861#comment_11840254 向构造函数传递参数是很方便的,如果用户改变了设置,在OnDeinit()中杀死该类,然后在OnInit()中用新的参数创建该类,这样会更快。 ;) 参数也可以不通过new传递给构造函数。 Igor Makanu 2019.07.05 08:57 #63 Dmitry Fedoseev: 参数可以传递给构造函数而不需要new。 那么,你将如何改变类字段(用户改变的EA设置)?- 你会再写一个方法吗?我以为在最后一页,你在争取" 多一个指针的变量"。"而在这里,你有一个完整的方法! ;) Dmitry Fedoseev 2019.07.05 09:09 #64 Igor Makanu: 和?你将如何改变类字段(用户改变的EA设置)?- 你会不会再写一个方法?我以为在最后一页,你在争取"为 指针增加一个变量"。"你在挣扎,这里有一个完整的方法! ;) input int a1=1; input int a2=2; class CX{ public: void CX(int a,int b){ } }; CX cx(a1,a2); Igor Makanu 2019.07.05 09:16 #65 Dmitry Fedoseev: 不可能;) #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict input int a1=1; input int a2=2; //+------------------------------------------------------------------+ class CX { public: int a1,a2; void CX(int a,int b) {a1=a;a2=b; } }; CX cx(a1,a2); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ void OnTick() { Comment("cx.a1 = ",cx.a1,"\ncx.a2 = ",cx.a2); } //+------------------------------------------------------------------+ 改变EA设置 Dmitry Fedoseev 2019.07.05 09:28 #66 Igor Makanu: 不可能;) 改变EA设置 很酷的伏击。 然而,我更希望增加一个改变参数的方法,但不要因为参数而使用new。 Igor Makanu 2019.07.05 09:40 #67 Dmitry Fedoseev: 很酷的伏击。 尽管如此,我还是倾向于添加一个改变参数的方法,但不要因为参数就使用new。 不使用新的是一种迷信?))) 我认为,如果它是方便的,你必须使用它!- 你的例子将在2次点击中使用new重写,一切都将正确工作,并处理用户改变设置的情况。 #property strict input int a1=1; input int a2=2; //+------------------------------------------------------------------+ class CX { public: int a1,a2; void CX(int a,int b) {a1=a;a2=b; } }; CX *cx; //+------------------------------------------------------------------+ int OnInit() { cx = new CX(a1,a2); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { delete cx; } //+------------------------------------------------------------------+ void OnTick() { Comment("cx.a1 = ",cx.a1,"\ncx.a2 = ",cx.a2); } //+------------------------------------------------------------------+ Dmitry Fedoseev 2019.07.05 09:48 #68 Igor Makanu: 不使用新的就是迷信?))) 我认为,如果它是方便的,你必须使用它!- 你的例子将在2次点击中使用new重写,一切都将正确工作,并处理用户改变设置的情况。 不是迷信,只是懒惰,在历史上,由于环境的原因。你必须写删除,并在Deinit()中进行。但默认情况下,模板中没有Deinit()函数。现在我看了看--EA模板有Deinit(),但以前是没有的。 Igor Makanu 2019.07.05 09:51 #69 Dmitry Fedoseev: 不是迷信,只是懒惰,在历史上,由于环境的原因。我们应该写删除,并在Deinit()中进行。但默认情况下,模板中没有Deinit()函数。我现在正在寻找--在EA模板中有Deinit(),但以前是没有的。 不要写删除--一切都会正常工作,这种罪恶(我指的是迷信) ))将接管终端,并在日志中嘀咕 "48字节的泄漏内存"、"剩下2个CX类型的对象 "和 "剩下未删除的对象"。 HH:在指标 模板中,没有Deinit()--这很烦人。 Dmitry Fedoseev 2019.07.05 09:55 #70 Igor Makanu: 不要写删除 - 一切都会正常工作,这种罪过(我是说迷信))。)将接管终端,并在其日志中嘀咕 "48字节的泄漏内存",然后 "剩下2个CX类型的对象 "和 "剩下未删除的对象" 不删除也可以,但没有用处。但是,终端是否照顾到了这个问题?它只报告了内存泄漏,但它并没有奉献给同样的对象。 1234567891011121314...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果事先知道对象的数量,并且在程序运行期间是恒定的,那么就不需要新建。在所有其他情况下,你需要新的。
不,这是我的例子https://www.mql5.com/ru/forum/160683/page861#comment_11840254
向构造函数传递参数很方便,如果用户改变了设置,在OnDeinit()中杀死该类,然后在OnInit()中用新的参数创建该类,这样会更快。
;)
不,这是我的例子https://www.mql5.com/ru/forum/160683/page861#comment_11840254
向构造函数传递参数是很方便的,如果用户改变了设置,在OnDeinit()中杀死该类,然后在OnInit()中用新的参数创建该类,这样会更快。
;)
参数也可以不通过new传递给构造函数。
参数可以传递给构造函数而不需要new。
那么,你将如何改变类字段(用户改变的EA设置)?- 你会再写一个方法吗?我以为在最后一页,你在争取" 多一个指针的变量"。"而在这里,你有一个完整的方法!
;)
和?你将如何改变类字段(用户改变的EA设置)?- 你会不会再写一个方法?我以为在最后一页,你在争取"为 指针增加一个变量"。"你在挣扎,这里有一个完整的方法!
;)
不可能;)
改变EA设置
不可能;)
改变EA设置
很酷的伏击。
然而,我更希望增加一个改变参数的方法,但不要因为参数而使用new。很酷的伏击。
尽管如此,我还是倾向于添加一个改变参数的方法,但不要因为参数就使用new。不使用新的是一种迷信?)))
我认为,如果它是方便的,你必须使用它!- 你的例子将在2次点击中使用new重写,一切都将正确工作,并处理用户改变设置的情况。
不使用新的就是迷信?)))
我认为,如果它是方便的,你必须使用它!- 你的例子将在2次点击中使用new重写,一切都将正确工作,并处理用户改变设置的情况。
不是迷信,只是懒惰,在历史上,由于环境的原因。你必须写删除,并在Deinit()中进行。但默认情况下,模板中没有Deinit()函数。现在我看了看--EA模板有Deinit(),但以前是没有的。
不是迷信,只是懒惰,在历史上,由于环境的原因。我们应该写删除,并在Deinit()中进行。但默认情况下,模板中没有Deinit()函数。我现在正在寻找--在EA模板中有Deinit(),但以前是没有的。
不要写删除--一切都会正常工作,这种罪恶(我指的是迷信) ))将接管终端,并在日志中嘀咕 "48字节的泄漏内存"、"剩下2个CX类型的对象 "和 "剩下未删除的对象"。
HH:在指标 模板中,没有Deinit()--这很烦人。
不要写删除 - 一切都会正常工作,这种罪过(我是说迷信))。)将接管终端,并在其日志中嘀咕 "48字节的泄漏内存",然后 "剩下2个CX类型的对象 "和 "剩下未删除的对象"
不删除也可以,但没有用处。但是,终端是否照顾到了这个问题?它只报告了内存泄漏,但它并没有奉献给同样的对象。