MQL5中的OOP问题 - 页 73

 
Igor Makanu:

把自己降低到适当的交流水平:我的问题是关于这个主题的吗? 你为什么带着网上的照片来这里? 你知道答案吗?- 不,坐下来,闭上嘴;)

首先,不要戳穿我,其次,不要对真相做出如此激烈的反应。
我必须对你说实话,我得到的印象是,你与今天的对话者相差不大。

初学者在MQL4和MQL5中的任何问题,对算法和代码的帮助和讨论

Igor Makanu, 2020.06.07 13:46

大家。请帮助我在我的代码中插入一个字符串变量。感谢

你能回答你自己的问题吗?
,还是你在什么地方剪掉了一段代码而不能使用它?你至少要猜出发生了什么))
......
,但我想这不是这种方法的答案。

 

一位出了名的好心版主承诺,如果你挑起口舌之争,就会被禁言 :-)

等待...

 
有些人知道得更多,有些人知道得更少。该论坛是用于交流和问答。
提出问题以丰富知识并不可耻。对提问者采取居高临下的态度是令人尴尬的--这是一个已经转入下一个课程的学生的水平,他正在广播 "通过嘴唇传播神圣的知识"。总的来说是一个完全的赞美......
 
Maxim Kuznetsov:

一位出了名的好心版主承诺,如果你挑起口舌之争,就会被禁言 :-)

等候...

要想让我生气是很难的,我已经用过军队里所有的骂人话了,没有它们就没有一切)))。

 
Maxim Kuznetsov:

一位出了名的好心版主承诺,如果你挑起口舌之争,就会被禁言 :-)

等待...

不,马克西姆,不是这样的。请以开放的心态重新阅读它。
 
#include <JSON\json.mqh>

JSONObject * getJSONObject(const string json)
{
   JSONValue *jv =((JSONParser *)(new JSONParser())).parse(json);   //1
   if (jv != NULL && jv.isObject()) return((JSONObject *)jv);       //2
   Print(__FUNCSIG__ + "parser error, json = ",json);
   delete jv;                                                       //3
   return(NULL);
}
void OnStart()
{
   JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}");
   if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period"));    
   delete jobj;                                                     //3
}


1.通过new创建的JSONParser 类型的对象没有删除
,无意义地铸造到JSONParser*
本地JSONParser 变量 有什么问题?或者你想使用一个临时对象但不知道它的签名?

2.JSONObject* 中无意义的铸造
3.jv和jobj的变量肯定不会是NULL?否则,在MQL中删除一个空指针将在日志中打印 "垃圾"。

 
Sergey Dzyublik:


1.通过new创建的JSONParser 类型的对象没有删除
,无意义地铸造到JSONParser*
本地JSONParser 变量 有什么问题?或者你想使用一个临时对象但不知道它的签名?

2.JSONObject* 中无意义的铸造
3.jv和jobj的变量肯定不会是NULL?否则,在MQL中删除一个空指针将在日志中打印 "垃圾"。

谢谢你,至少这是件好事。

这个方法是由库的作者使用的,我不认为用另一种方式来写解析的调用有什么意义


我不明白MQL在处理指针时的情况--当指针变成一个实体时,你不能取消引用,而当它是一个对象的指针时--我不知道该怎么做((

SZY:我20年前学过C++,后来工业工程师并没有广泛使用它。 首先他们都用Delphi,然后是Sharp,对于控制器我没有见过C++,一切都在专门的 软件上工作--这可能是大学对工程学生的印记--他们总是从Pascal开始训练,甚至在伏尔加格勒理工学院他们也读Turbo-Pascal。...谁知道他们从哪里得到的编译器 ))))


ZS:去掉副歌,这不好,通常是反过来的。

 
Igor Makanu:

谢谢,这很有意义。

这个方法是由库的作者使用的,我不认为用另一种方式来写解析的调用有什么意义


我不明白MQL在处理指针时的情况--当指针变成一个实体时,你不能取消引用,而当它是一个对象的指针时--我不知道该怎么做(()

SZY:我20年前学过C++,后来工业工程师并没有广泛使用它。 首先他们都用Delphi,然后是Sharp,对于控制器我没有见过C++,一切都在专门的 软件上工作--这可能是大学对工程学生的印记--他们总是从Pascal开始训练,甚至在伏尔加格勒理工学院他们也读Turbo-Pascal。...谁知道他们从哪里得到的编译器 ))))


SZY:去掉副歌,这不好,通常是反过来的。

这里没有指针)有一个类的句柄,是的,用它工作类似于用指针工作,但这是共同的东西的结束。

现在说说突出的那个。

  • 你可以在堆栈或堆中创建一个对象。
    CTest test;             //test - object
    CTest* test=new CTest;  //test - handle of object
    在第一种情况下,编译器添加了一个隐含的析构器调用,它没有清理任何内存;它只是将堆栈指针返回到函数被调用 之前的位置。在第二种情况下,当离开作用域时,对象所占用的内存仍然被内存管理器标记为占用,由于没有指针指向它了,它不能被释放(这被称为内存泄漏),所以我们必须通过删除显式地销毁对象。
  • 至于本地运行时间。这里的句柄,如果没有特别针对它的重载函数,就会被隐式地取消引用,例如。
    class CTest{
    };
    
    void OnStart()
      {
       CTest test;
       CTest* _test=new CTest;
       Test(test);
       Test(&test);
       Test(_test);
       _Test(_test);
       delete _test;
      }
      
    void Test(CTest &test){Print("Object");}
    void Test(CTest* test){Print("Handle");}
    void _Test(CTest &test) {Print("Ok");}
    PS。是的,忘记夏普吧,根本没有共同点))))
 

Vladimir Simakov:

PS。是的,忘掉夏普吧,没有什么共同点)))。

你不会明白的,你一直习惯于好的东西,这是合乎逻辑的,如果你搞砸了--VS会马上告诉你,当代码被执行时--你离开了函数体--就忘了它吧,你只要给创建的代码赋值NULL,它就会自己消除混乱))

谢谢,我将考虑一下

 
Igor Makanu:

这不行,你很快就会习惯一个好的东西,这都是合乎逻辑的,如果你在某个地方搞砸了--VS会马上告诉你,在代码执行中,你离开了函数体--你就会忘记,最多是你创建了NULL--它会自己清除掉))

谢谢,我将考虑一下

是的,只有一个可悲的隐含对象引用(例如一些委托的调用叶中的方法调用)活在代码丛中,而内存已经消失。也不能在夏普中搞得一团糟。