错误、漏洞、问题 - 页 1785

 
fxsaber:
我知道析构器是用来做什么的。我不清楚为什么虚拟这个词要写在其定义之前。
我需要它与C++的代码兼容,因为那里的析构器是不同的。
 
A100:
我需要它与C++的代码兼容,因为那里的析构器是不同的。
明白了,谢谢。你经常移植到MQL5吗?- 这就是为什么这些例子如此具体?
 
fxsaber:
我知道析构器是用来做什么的。我不明白为什么我们要在其定义之前加上虚拟这个词。

虚拟函数和析构器>>

基本规则:如果你的类中至少有一个虚拟函数,那么析构函数也应该是虚拟的。记住,析构器默认不是虚拟的,所以你应该明确地声明它。如果你不这样做,你几乎肯定会在你的程序中出现内存泄漏。同样,不需要太多的智慧就能理解为什么。我们来看看几个例子。

 
fxsaber:
明白了,谢谢。你经常移植到MQL5吗?- 这就是为什么这些例子如此具体?
我不经常移植。只在第一眼看到的时候是具体的。一些 "专家 "在这里写道,超过3个衍生班 是有害的。我经常只有3-4个基类需要适当的初始化,然后才是真正的衍生品。
 
Anatoli Kazharski:

虚拟函数和析构器>>

int main()
{
    A * pA = new B;
    delete pA;
    return EXIT_SUCCESS;
}

这一次,对象的构造是正常的,但当它被销毁时,会发生内存泄漏,因为派生类的析构器没有被调用。

原因是,删除是通过一个指向基类的指针进行的,编译器使用早期绑定来调用析构器。基类的析构器不能调用派生类的析构器,因为它对它一无所知。结 果是,为派生类分配的一些内存被不可挽回地丢失。

为了避免这种情况,基类中的析构器必须被声明为虚拟

我在架构上不明白,为什么通过使基本的析构器成为虚拟的,会出现派生的析构器的信息。

我现在的理解是,当基数是虚拟的,通过定义一个派生的析构器,我们对派生的析构器进行替换,而不是基数的析构器。但这样一来,在这个例子中就不应该调用基础析构器。

很明显,我不明白这是怎么回事。我在MQL5中从未遇到过虚拟函数的问题。因为他们,我喜欢很多OOP。我以为我都明白了。现在我完全陷入了两难境地。请用你自己的方式向我解释。

 
A100:
描写小。只在第一眼看到的时候是具体的。一些 "专家 "在这里写道,所有超过3个衍生类 的东西都是有害的。我经常只有3-4个基类可以正确地初始化,然后才开始真正的衍生产品。
我想看看专业人士(在我看来)如何用MQL5写作的例子。
 
fxsaber:

但这样一来,在这个例子中就不应该调用基础析构器。

它被派生的析构器隐式地调用。这实际上是它与简单的虚拟函数 不同的地方。
 
Комбинатор:
它被派生的析构器隐式地调用。这实际上是它与简单的虚拟函数 不同的地方。
谢谢你。事实证明,虚拟析构器不只是一个在对象被销毁时被调用的虚拟函数,而是一些更棘手的实体。
 
fxsaber:
好吧,他必须删除该对象)这是棘手的部分。
 
Alexey Kozitsyn:

SymbolInfoTick() 错误地返回不相关的数据--刻度线过冲。Build 1525 x64。从指标上测试,没有在专家顾问上测试。

真实,开放,访问服务器V。悲伤!请注意这个问题。还有就是对1598238号 申请中的问题(从第10页开始,2017.01.26 09:43的帖子

亲爱的开发者们,让我们来解决蜱虫的问题!提供的代码,在这里--问题,不需要寻找任何东西,只需要反应和解决它!

如果我们用OnTick代替OnCalculate,就不会发生错误。问题不在SymbolInfoTick,问题是指标被歪曲地配置为不跳过。