void f()
{
for ( int i = 0;; )
{
Print( i );
int i = 5; //Warning: declaration of 'i' hides local declarationPrint( i );
break;
}
}
void For( int i = 0 )
{
Print( i );
int i = 5; //Error: redefinition of formal parameter 'i'Print( i );
}
class A
{
public :
A() { Print("Start"); };
~A() {
Print("End");
Print(EnumToString(CheckPointer(GetPointer(this))));
if (CheckPointer(GetPointer(this))!=POINTER_DYNAMIC)
deleteGetPointer(this);};
};
A a;
voidOnStart()
{
}
2018.09.2321:46:42.960 Test_CheckPointer (EURUSD,M1) Start
2018.09.2321:46:42.961 Test_CheckPointer (EURUSD,M1) 1 undeleted objects left
2018.09.2321:46:42.961 Test_CheckPointer (EURUSD,M1) 1 object of type A left
2018.09.2321:46:42.961 Test_CheckPointer (EURUSD,M1) 32 bytes of leaked memory
没有问题...有一个错误。我也不明白你为什么要把解释从你的脑子里拉出来。 默认的打印有以下签名。
而且它还可以与其他功能相冲突(如果需要的话)
打印签名超出了MQL5语言 的范围。如果MQL5完全禁止Print重载,这将不是一个错误。
我希望这个 "错误 "不会妨碍你创建TS,也不需要编写拐杖。
我测量了测试仪的性能。为了做到这一点,我在每个tick上开仓和平仓。我测量了100点的执行时间。我把它运行了100 000次。我总共测量了1000个刻度。我得到了这个图表
在它们之间的距离几乎相等的情况下,出现了减速的尖峰。我在优化模式下测量了它。如果我忽略这些尖峰,测试仪的性能就会变化25%,而不是恒定值。也许又是Windows速度测光的把戏。
ZZZ 同样的代码在MT4上运行
平均而言,MT4测试器处理一个刻度的时间比MT5少1.5-2倍。
可能通过使用遗传优化算法 来涌现。
平均而言,MT4-Tester处理一个tick的时间比MT5少1.5-2倍。
可能通过使用遗传优化算法 来涌现。
没有GA。从一个Agent上的两个通道进行优化。
而这已经是纯粹的操纵和误导了。
源代码已经到位。
一种情况是警告,另一种情况是错误
根本区别是什么?以C++为例,在这两种情况下都会出现错误
我请求有识之士的帮助,以了解类实例的指针问题。我不明白这一点。
下面是一个脚本的例子。
当执行它时,我们有,如预期。
如果一个类的实例被声明为。
A *a= new A;
那么在执行时,我们有。
也就是说,析构器甚至没有被启动,因此内存没有被释放。
但如果一个类的实例被声明为。
A a= new A;
构造函数启动了两次,析构函数启动了一次,但是内存没有被释放,我们有POINTER_AUTOMATIC 对象指针类型,尽管它本来是POINTER_DYNAMIC 的。
如何总是执行析构器并正确执行删除
Как добиться всегда выполнения деструктора и правильного выполнения delete.
请看来自C++的智能指针的主题,并适应MQL(https://habr.com/post/140222/)。
也许kodobase里有什么东西...
请看来自C++的智能指针主题和适应MQL(https://habr.com/post/140222/)。
也许kodobase里有什么东西...
谢谢,但没有看到对我的问题的任何答案。
我不明白为什么当A *a= new A 时不调用析构器 。
谢谢你,但我在那里没有看到对我的问题的任何答案。
我不明白为什么当A *a= new A 时不调用析构器 。
结果。
1:pointer_automatic
1:pointer_dynamic
2:pointer_dynamic
2:pointer_automatic
谢谢你,但我在那里没有看到对我的问题的任何答案。
我不明白为什么当A *a= new A 时不调用析构器 。
用new 创建,用delete删除