新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 598 1...591592593594595596597598599600601602603604605...1953 新评论 Vasiliy Sokolov 2018.08.09 10:31 #5971 Juer:你能告诉我,我是否在创建一个CArrayObj对象并向其添加其他对象?我仍然需要这些物体本身。而且我可以删除这个列表对象。 在删除之前,我应该用哪种方法来删除其中的对象?Detach() 还是Delete()? 或 Clear() / Shutdown() ?混乱是因为你不了解内存是如何分配的,以及应该如何处理。在一般情况下,无论是CArrayObj还是位于其中的对象。 没有必要手动删除. // Где-то в коде есть объект CArrayObj CArrayObj ArrayOfItems; ... //Где-то в коде заполнили коллекцию пользовательскими объектами void Create() { ArrayOfItems.Add(new CUserItem()); ArrayOfItems.Add(new CUserItem()); //... ArrayOfItems.Add(new CUserItem()); } // Так не правильно делать. Удалять ничего не надо. void OnDeinit(const int reason) { delete ArrayOfItems; } Juer 2018.08.09 10:55 #5972 我把一个对象传给类函数,是对它的引用,这样函数中的动作就会发生在它身上,然后它就会被返回。但我不需要类对象 本身了......那么,我怎样才能删除它呢? for(int i=0;i<test_objects.Total();i++) { bool res=false; CTestObject *test_object=test_objects.At(i); if(!CheckPointer(test_object) continue; CTestClass *test_class=new CTestClass(); if(test_class.Check(test_object)) res=true; delete test_class; } 像这样。当我删除test_class时,它说在下一次迭代时指针无效...。 我如何删除test_class而不删除传递给它的对象? Juer 2018.08.09 10:57 #5973 Vasiliy Sokolov:你感到困惑是因为你不了解内存是如何分配的,以及应该如何处理。在一般情况下,无论是CArrayObj还是它里面的对象。 没有必要手动删除. 好吧,如果我已经创建了一个对象的数组。也就是说,我创建了一个数组对象ArrayObj,对它进行了必要的操作。那么我不需要这个对象,但需要里面的对象本身(数组成员),我是不是应该删除这个数组对象? [删除] 2018.08.09 11:07 #5974 这个vv Ihor Herasko将使它在周末,它不在那里;) 问题从上周四开始就一直悬而未决!: ) 我毕竟要对我的评论负责,而且我给了你一个好的评论,友好点,结束你的游戏,就像 "我每天回答一个问题 "一样,因为我对等待不感兴趣,而且我真的不想校对我的评论。) Vasiliy Sokolov 2018.08.09 11:20 #5975 Juer:我把一个对象传给类函数,是对它的引用,这样函数中的动作就会发生在它身上,然后它就会被返回。但我不需要类对象 本身了......那么,我怎样才能删除它呢? 像这样。当我删除test_class时,它说在下一次迭代时指针无效...。 如何删除test_class而不删除传递给它的对象?你需要避免创建指向对象的指针。取而代之的是直接在函数的堆栈上与对象一起工作。 CTestClass test_class; for(int i=0;i<test_objects.Total();i++) { bool res=false; CTestObject *test_object=dynamic_cast<CTestObject*>(test_objects.At(i)); if(test_object == NULL) continue; if(test_class.Check(test_object)) res=true; } 既然test_object被保证包含CTestObjects(除了这些对象,你没有添加任何东西,对吗?:)那么你可以通过删除ghost检查来简化代码。 CTestClass test_class; for(int i=0;i<test_objects.Total();i++) { CTestObject *test_object = test_objects.At(i); bool res = test_class.Check(test_object); } 而且只是简单说说。 CTestClass test_class; for(int i=0;i<test_objects.Total();i++) bool res = test_class.Check((CTestObject)test_objects.At(i)); Vasiliy Sokolov 2018.08.09 11:26 #5976 Juer:好吧,如果我已经创建了一个对象的数组。也就是说,我创建了一个数组对象ArrayObj,对它进行了必要的操作。那么我不需要这个对象,但我需要里面的对象本身(数组成员),我不应该删除这个数组对象吗?你不了解CArrayObj的用途。它是你放在里面的物体的主人。如果你删除CArrayObj,你放在里面的对象也会被删除。由于ArrayObj是这些对象的所有者,它也是它们的管理者--它控制对对象的引用,并在不再需要集合时自动删除所有分配的内存。所以你不需要释放任何东西并使用删除操作符。一切都是由CArrayObj自己完成的。CArrayObj本身在计算机中几乎不占内存(几十个字节),所以试图删除它是毫无意义的。 Juer 2018.08.09 11:31 #5977 Vasiliy Sokolov:你没有理解CArrayObj的目的。它是你放在里面的物体的主人。如果你删除了CArrayObj,那么你放在里面的对象也会被删除。由于ArrayObj是这些对象的所有者,它也是它们的管理者--它控制对对象的引用,并在不再需要集合时自动删除所有分配的内存。所以你不需要释放任何东西并使用删除操作符。一切都是由CArrayObj自己完成的。CArrayObj本身在计算机中几乎不占用任何内存(几十个字节),所以试图删除它没有任何意义。但随后出现错误的未删除对象CArrayObj Vasiliy Sokolov 2018.08.09 11:41 #5978 Juer:但随后出现错误的未删除对象CArrayObj所以他们在CArrayObj上犯了一个错误。他们写了CArrayObj* test_objects 而不是CArrayObj, 但忘了为它做一个构造函数; 也许他们错误地配置了内存模型来处理CArrayObj。也许程序员只是过度使用了指针。诊断很清楚:在不需要指针的地方使用指针 往往会导致泄漏。 [删除] 2018.08.09 12:07 #5979 你好! 你能告诉我如何将光标移动到,比如说,文本文档中的第7行,从这个位置提取一个子串 吗? 一个行的多个文本文件和一个行的多个文件哪个更快? Juer 2018.08.09 12:16 #5980 Vasiliy Sokolov:所以他们在CArrayObj上犯了一个错误。而不是:CArrayObj test_objects; 他们写了:CArrayObj* test_objects,但忘了为它做一个析构器; 也许他们错误地配置了内存模型,使之与CArrayObj一起工作。也许他们只是过度使用了指针。诊断很清楚:在不需要指针的地方使用指针 往往会导致泄漏。但哪里根本不需要它们呢?如果你可以直接声明对象,使用它们有什么意义? 1...591592593594595596597598599600601602603604605...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能告诉我,我是否在创建一个CArrayObj对象并向其添加其他对象?我仍然需要这些物体本身。而且我可以删除这个列表对象。
在删除之前,我应该用哪种方法来删除其中的对象?Detach() 还是Delete()?
或 Clear() / Shutdown() ?
混乱是因为你不了解内存是如何分配的,以及应该如何处理。在一般情况下,无论是CArrayObj还是位于其中的对象。 没有必要手动删除.
我把一个对象传给类函数,是对它的引用,这样函数中的动作就会发生在它身上,然后它就会被返回。但我不需要类对象 本身了......那么,我怎样才能删除它呢?
像这样。当我删除test_class时,它说在下一次迭代时指针无效...。
我如何删除test_class而不删除传递给它的对象?
你感到困惑是因为你不了解内存是如何分配的,以及应该如何处理。在一般情况下,无论是CArrayObj还是它里面的对象。 没有必要手动删除.
好吧,如果我已经创建了一个对象的数组。也就是说,我创建了一个数组对象ArrayObj,对它进行了必要的操作。那么我不需要这个对象,但需要里面的对象本身(数组成员),我是不是应该删除这个数组对象?
这个vv Ihor Herasko将使它在周末,它不在那里;)
问题从上周四开始就一直悬而未决!: )
我毕竟要对我的评论负责,而且我给了你一个好的评论,友好点,结束你的游戏,就像 "我每天回答一个问题 "一样,因为我对等待不感兴趣,而且我真的不想校对我的评论。)我把一个对象传给类函数,是对它的引用,这样函数中的动作就会发生在它身上,然后它就会被返回。但我不需要类对象 本身了......那么,我怎样才能删除它呢?
像这样。当我删除test_class时,它说在下一次迭代时指针无效...。
如何删除test_class而不删除传递给它的对象?
你需要避免创建指向对象的指针。取而代之的是直接在函数的堆栈上与对象一起工作。
既然test_object被保证包含CTestObjects(除了这些对象,你没有添加任何东西,对吗?:)那么你可以通过删除ghost检查来简化代码。
而且只是简单说说。
好吧,如果我已经创建了一个对象的数组。也就是说,我创建了一个数组对象ArrayObj,对它进行了必要的操作。那么我不需要这个对象,但我需要里面的对象本身(数组成员),我不应该删除这个数组对象吗?
你不了解CArrayObj的用途。它是你放在里面的物体的主人。如果你删除CArrayObj,你放在里面的对象也会被删除。由于ArrayObj是这些对象的所有者,它也是它们的管理者--它控制对对象的引用,并在不再需要集合时自动删除所有分配的内存。所以你不需要释放任何东西并使用删除操作符。一切都是由CArrayObj自己完成的。CArrayObj本身在计算机中几乎不占内存(几十个字节),所以试图删除它是毫无意义的。
你没有理解CArrayObj的目的。它是你放在里面的物体的主人。如果你删除了CArrayObj,那么你放在里面的对象也会被删除。由于ArrayObj是这些对象的所有者,它也是它们的管理者--它控制对对象的引用,并在不再需要集合时自动删除所有分配的内存。所以你不需要释放任何东西并使用删除操作符。一切都是由CArrayObj自己完成的。CArrayObj本身在计算机中几乎不占用任何内存(几十个字节),所以试图删除它没有任何意义。
但随后出现错误的未删除对象CArrayObj
但随后出现错误的未删除对象CArrayObj
所以他们在CArrayObj上犯了一个错误。他们写了CArrayObj* test_objects 而不是CArrayObj, 但忘了为它做一个构造函数; 也许他们错误地配置了内存模型来处理CArrayObj。也许程序员只是过度使用了指针。诊断很清楚:在不需要指针的地方使用指针 往往会导致泄漏。
你好!
你能告诉我如何将光标移动到,比如说,文本文档中的第7行,从这个位置提取一个子串 吗?
一个行的多个文本文件和一个行的多个文件哪个更快?
所以他们在CArrayObj上犯了一个错误。而不是:CArrayObj test_objects; 他们写了:CArrayObj* test_objects,但忘了为它做一个析构器; 也许他们错误地配置了内存模型,使之与CArrayObj一起工作。也许他们只是过度使用了指针。诊断很清楚:在不需要指针的地方使用指针 往往会导致泄漏。
但哪里根本不需要它们呢?如果你可以直接声明对象,使用它们有什么意义?