错误、漏洞、问题 - 页 1785 1...177817791780178117821783178417851786178717881789179017911792...3184 新评论 A100 2017.02.07 11:26 #17841 fxsaber: 我知道析构器是用来做什么的。我不清楚为什么虚拟这个词要写在其定义之前。 我需要它与C++的代码兼容,因为那里的析构器是不同的。 fxsaber 2017.02.07 11:31 #17842 A100: 我需要它与C++的代码兼容,因为那里的析构器是不同的。 明白了,谢谢。你经常移植到MQL5吗?- 这就是为什么这些例子如此具体? Anatoli Kazharski 2017.02.07 11:37 #17843 fxsaber: 我知道析构器是用来做什么的。我不明白为什么我们要在其定义之前加上虚拟这个词。虚拟函数和析构器>>基本规则:如果你的类中至少有一个虚拟函数,那么析构函数也应该是虚拟的。记住,析构器默认不是虚拟的,所以你应该明确地声明它。如果你不这样做,你几乎肯定会在你的程序中出现内存泄漏。同样,不需要太多的智慧就能理解为什么。我们来看看几个例子。 A100 2017.02.07 11:50 #17844 fxsaber: 明白了,谢谢。你经常移植到MQL5吗?- 这就是为什么这些例子如此具体? 我不经常移植。只在第一眼看到的时候是具体的。一些 "专家 "在这里写道,超过3个衍生班 是有害的。我经常只有3-4个基类需要适当的初始化,然后才是真正的衍生品。 fxsaber 2017.02.07 11:53 #17845 Anatoli Kazharski:虚拟函数和析构器>>int main(){ A * pA = new B; delete pA; return EXIT_SUCCESS;}这一次,对象的构造是正常的,但当它被销毁时,会发生内存泄漏,因为派生类的析构器没有被调用。原因是,删除是通过一个指向基类的指针进行的,编译器使用早期绑定来调用析构器。基类的析构器不能调用派生类的析构器,因为它对它一无所知。结 果是,为派生类分配的一些内存被不可挽回地丢失。为了避免这种情况,基类中的析构器必须被声明为虚拟。我在架构上不明白,为什么通过使基本的析构器成为虚拟的,会出现派生的析构器的信息。我现在的理解是,当基数是虚拟的,通过定义一个派生的析构器,我们对派生的析构器进行替换,而不是基数的析构器。但这样一来,在这个例子中就不应该调用基础析构器。很明显,我不明白这是怎么回事。我在MQL5中从未遇到过虚拟函数的问题。因为他们,我喜欢很多OOP。我以为我都明白了。现在我完全陷入了两难境地。请用你自己的方式向我解释。 fxsaber 2017.02.07 11:54 #17846 A100: 描写小。只在第一眼看到的时候是具体的。一些 "专家 "在这里写道,所有超过3个衍生类 的东西都是有害的。我经常只有3-4个基类可以正确地初始化,然后才开始真正的衍生产品。 我想看看专业人士(在我看来)如何用MQL5写作的例子。 TheXpert 2017.02.07 11:58 #17847 fxsaber:但这样一来,在这个例子中就不应该调用基础析构器。 它被派生的析构器隐式地调用。这实际上是它与简单的虚拟函数 不同的地方。 fxsaber 2017.02.07 12:05 #17848 Комбинатор: 它被派生的析构器隐式地调用。这实际上是它与简单的虚拟函数 不同的地方。 谢谢你。事实证明,虚拟析构器不只是一个在对象被销毁时被调用的虚拟函数,而是一些更棘手的实体。 TheXpert 2017.02.07 12:13 #17849 fxsaber: 好吧,他必须删除该对象)这是棘手的部分。 fxsaber 2017.02.07 12:33 #17850 Alexey Kozitsyn:SymbolInfoTick() 错误地返回不相关的数据--刻度线过冲。Build 1525 x64。从指标上测试,没有在专家顾问上测试。真实,开放,访问服务器V。悲伤!请注意这个问题。还有就是对1598238号 申请中的问题(从第10页开始,2017.01.26 09:43的帖子)。亲爱的开发者们,让我们来解决蜱虫的问题!提供的代码,在这里--问题,不需要寻找任何东西,只需要反应和解决它! 如果我们用OnTick代替OnCalculate,就不会发生错误。问题不在SymbolInfoTick,问题是指标被歪曲地配置为不跳过。 1...177817791780178117821783178417851786178717881789179017911792...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我知道析构器是用来做什么的。我不清楚为什么虚拟这个词要写在其定义之前。
我需要它与C++的代码兼容,因为那里的析构器是不同的。
我知道析构器是用来做什么的。我不明白为什么我们要在其定义之前加上虚拟这个词。
虚拟函数和析构器>>
基本规则:如果你的类中至少有一个虚拟函数,那么析构函数也应该是虚拟的。记住,析构器默认不是虚拟的,所以你应该明确地声明它。如果你不这样做,你几乎肯定会在你的程序中出现内存泄漏。同样,不需要太多的智慧就能理解为什么。我们来看看几个例子。
明白了,谢谢。你经常移植到MQL5吗?- 这就是为什么这些例子如此具体?
虚拟函数和析构器>>
{
A * pA = new B;
delete pA;
return EXIT_SUCCESS;
}
这一次,对象的构造是正常的,但当它被销毁时,会发生内存泄漏,因为派生类的析构器没有被调用。
原因是,删除是通过一个指向基类的指针进行的,编译器使用早期绑定来调用析构器。基类的析构器不能调用派生类的析构器,因为它对它一无所知。结 果是,为派生类分配的一些内存被不可挽回地丢失。为了避免这种情况,基类中的析构器必须被声明为虚拟。
我在架构上不明白,为什么通过使基本的析构器成为虚拟的,会出现派生的析构器的信息。
我现在的理解是,当基数是虚拟的,通过定义一个派生的析构器,我们对派生的析构器进行替换,而不是基数的析构器。但这样一来,在这个例子中就不应该调用基础析构器。
很明显,我不明白这是怎么回事。我在MQL5中从未遇到过虚拟函数的问题。因为他们,我喜欢很多OOP。我以为我都明白了。现在我完全陷入了两难境地。请用你自己的方式向我解释。
描写小。只在第一眼看到的时候是具体的。一些 "专家 "在这里写道,所有超过3个衍生类 的东西都是有害的。我经常只有3-4个基类可以正确地初始化,然后才开始真正的衍生产品。
但这样一来,在这个例子中就不应该调用基础析构器。
它被派生的析构器隐式地调用。这实际上是它与简单的虚拟函数 不同的地方。
SymbolInfoTick() 错误地返回不相关的数据--刻度线过冲。Build 1525 x64。从指标上测试,没有在专家顾问上测试。
真实,开放,访问服务器V。悲伤!请注意这个问题。还有就是对1598238号 申请中的问题(从第10页开始,2017.01.26 09:43的帖子)。
亲爱的开发者们,让我们来解决蜱虫的问题!提供的代码,在这里--问题,不需要寻找任何东西,只需要反应和解决它!