MQL5中的OOP问题 - 页 72 1...656667686970717273747576777879...96 新评论 Igor Makanu 2020.06.07 10:37 #711 我对MQL5中的指针 有一些误解--一个非常 "不明确的东西"。 我在一个测试脚本中遇到了一个问题(我已经附上了库)。 这段代码将删除指针,一切正常。 #include <JSON\json.mqh> JSONObject * getJSONObject(const string json) { JSONParser parser; JSONValue* jv; JSONObject* jo = jv = ((JSONParser)(parser)).parse(json); if (jv != NULL && jv.isObject()) return(jo); Print(__FUNCSIG__ + "parser error, json = ",json); delete jv; return(NULL); } void OnStart() { JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}"); if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period")); delete jobj; } 我一开始就想这样写。 #include <JSON\json.mqh> JSONObject * getJSONObject(const string json) { JSONValue *jv =((JSONParser *)(new JSONParser())).parse(json); if (jv != NULL && jv.isObject()) return((JSONObject *)jv); Print(__FUNCSIG__ + "parser error, json = ",json); delete jv; return(NULL); } void OnStart() { JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}"); if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period")); delete jobj; } 当运行脚本时,我得到: 1个JSONParser类型的对象离开了 那么我如何在函数之外删除这个JSONParser呢? 附加的文件: Include.zip 12 kb Vladimir Simakov 2020.06.07 11:31 #712 Igor Makanu:我对MQL5中的指针 有一些误解--一个非常 "不明确的东西"。我在一个测试脚本中遇到了一个问题(我已经附上了库)。这段代码将删除指针,一切正常。我一开始就想这样写。当运行脚本时,我得到: 1个JSONParser类型的对象离开了那么我如何在函数之外删除这个JSONParser呢? 在这种情况下,必须在堆栈中创建一个临时对象)))CSomeObj(<params>).SomeMethod() Igor Makanu 2020.06.07 11:44 #713 Vladimir Simakov: 在这种情况下,你必须在堆栈上创建一个临时对象))) 。 CSomeObj(<params>).SomeMethod() 这是我的第一个例子,我在本地范围内创建了JSONParser,当我退出函数时它将被删除。 问题是,基本上,这样的事情作为一个例子#2夏普会吞下,这里我仍然需要思考......在一般情况下,夏普比普罗斯更简洁!!--所以对于一个Cholivar!))) Vladimir Simakov 2020.06.07 11:53 #714 Igor Makanu:这是我的第一个例子,我在本地范围内创建JSONParser,当我退出函数时,它将被删除。问题是,在原则上,这样的事情作为一个例子2夏普将吞下,在这里,你仍然需要思考......在一般情况下,夏普比普罗斯更简洁!!--所以对于一个Cholivar!))) 你在局部区域创建了一个指向对象的指针,但对象本身在堆中,这就是泄露的原因)。这不是夏普,垃圾收集器不见了)))。 Igor Makanu 2020.06.07 11:55 #715 Vladimir Simakov: 你在局部区域创建了一个指向对象的指针,而对象本身在堆中,是对象泄漏了)。 这不是夏普,没有收集垃圾的人)))。 我告诉过你夏普的规则!))) Nn,一般来说,第一个选项我会使用,不会打扰到大脑,谢谢你的参与! Igor Makanu 2020.06.07 13:08 #716 反正我不明白MQL中指针的行为,这段代码工作起来没有任何问题,而且会在脚本结束时删除所有动态创建的对象。 #include <JSON\json.mqh> //+------------------------------------------------------------------+ JSONObject *getJSONObject(const string json) { JSONParser *parser = new JSONParser(); JSONValue *jv = parser.parse(json); delete parser; if (jv != NULL && jv.isObject()) return((JSONObject *)jv); Print(__FUNCSIG__ + "parser error, json = ", json); delete jv; return(NULL); } //+------------------------------------------------------------------+ void OnStart() { JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}"); if(jobj != NULL) Print("m_period = ", jobj.getInt("m_period")); delete jobj; } 我已经删除了 JSONParser *parser对象,所以它应该得到所有相关的指针为NULL。 Maxim Kuznetsov 2020.06.07 13:13 #717 Igor Makanu:反正我不明白MQL中指针的行为,这段代码工作起来没有任何问题,而且会在脚本结束时删除所有动态创建的对象。我刚刚删除了 JSONParser *parser对象,所以它应该得到所有的指针为NULL。 为什么? 再说一遍,这不是夏普,没有 "链接参考 "这种东西......该对象一直活到程序员亲自杀了它为止,而不考虑引用。 Igor Makanu 2020.06.07 13:19 #718 Maxim Kuznetsov:我为什么要这样做?再说一遍,这不是夏普,没有 "链接参考 "这回事......该对象一直活到程序员亲自杀了它为止,而不考虑引用。 嗯,这就是问题所在,我们有一个可行的代码变体,但指针的行为对我来说并不清楚 从理论上讲,第一条信息中的变体2应该可以工作 Sergey Dzyublik 2020.06.07 13:54 #719 对于那些讨论 "高 "的用户来说,这很搞笑,因为实际上他们不能把1+1放在一起。 我不知道邓宁-克鲁格效应是否刺痛了任何地方? awsomdino2 2020.06.07 13:58 #720 我在这里是多么厚颜无耻...... 你得到了知识折扣,我没有得到折扣),尽管它们都很昂贵。 1...656667686970717273747576777879...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我对MQL5中的指针 有一些误解--一个非常 "不明确的东西"。
我在一个测试脚本中遇到了一个问题(我已经附上了库)。
这段代码将删除指针,一切正常。
我一开始就想这样写。
当运行脚本时,我得到: 1个JSONParser类型的对象离开了
那么我如何在函数之外删除这个JSONParser呢?
我对MQL5中的指针 有一些误解--一个非常 "不明确的东西"。
我在一个测试脚本中遇到了一个问题(我已经附上了库)。
这段代码将删除指针,一切正常。
我一开始就想这样写。
当运行脚本时,我得到: 1个JSONParser类型的对象离开了
那么我如何在函数之外删除这个JSONParser呢?
在这种情况下,你必须在堆栈上创建一个临时对象))) 。
这是我的第一个例子,我在本地范围内创建了JSONParser,当我退出函数时它将被删除。
问题是,基本上,这样的事情作为一个例子#2夏普会吞下,这里我仍然需要思考......在一般情况下,夏普比普罗斯更简洁!!--所以对于一个Cholivar!)))
这是我的第一个例子,我在本地范围内创建JSONParser,当我退出函数时,它将被删除。
问题是,在原则上,这样的事情作为一个例子2夏普将吞下,在这里,你仍然需要思考......在一般情况下,夏普比普罗斯更简洁!!--所以对于一个Cholivar!)))
你在局部区域创建了一个指向对象的指针,而对象本身在堆中,是对象泄漏了)。
我告诉过你夏普的规则!)))
Nn,一般来说,第一个选项我会使用,不会打扰到大脑,谢谢你的参与!
反正我不明白MQL中指针的行为,这段代码工作起来没有任何问题,而且会在脚本结束时删除所有动态创建的对象。
我已经删除了 JSONParser *parser对象,所以它应该得到所有相关的指针为NULL。
反正我不明白MQL中指针的行为,这段代码工作起来没有任何问题,而且会在脚本结束时删除所有动态创建的对象。
我刚刚删除了 JSONParser *parser对象,所以它应该得到所有的指针为NULL。
为什么?
再说一遍,这不是夏普,没有 "链接参考 "这种东西......该对象一直活到程序员亲自杀了它为止,而不考虑引用。
我为什么要这样做?
再说一遍,这不是夏普,没有 "链接参考 "这回事......该对象一直活到程序员亲自杀了它为止,而不考虑引用。
嗯,这就是问题所在,我们有一个可行的代码变体,但指针的行为对我来说并不清楚
从理论上讲,第一条信息中的变体2应该可以工作
我不知道邓宁-克鲁格效应是否刺痛了任何地方?
我在这里是多么厚颜无耻......
你得到了知识折扣,我没有得到折扣),尽管它们都很昂贵。