错误、漏洞、问题 - 页 1637

 
Slawa:

1.五个还是四个?我猜是4。只需放大测试器窗口。

2.采取并测试它

哈哈,非常感谢你(mt4)。
1366 x 768((三分之一的屏幕需要被拉长。
你的千里眼技能已经达到了水平。

 
A100:

让我们举一个更容易的例子

正式地说,有多少个A( A& ) 类的调用?一。至少C++不创建任何中间对象

也许RVO(返回值优化)在C++中是默认设置的?
 
A100:

1.复制构造函数的双重调用

2.没有 "泄漏的内存 "信息(新的没有删除)。

  1. 关于RVO的优化(也有NRVO)说得很对,目前它不在MQL编译器中,但将来会加入(目前我们认为这个优化是一个非优先的任务)。
  2. 没有复制,请仔细检查,你可能没有指定复制的重要细节。
 
Ilyas: 2.不能复制,请仔细检查,你可能没有指定复制的重要细节。

简化的例子

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

结果。

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

结论:没有调用析构器,同时也没有内存泄漏信息(如下例所示)。

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

结果。

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16字节的泄漏内存
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1个A型物体离开
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 剩下1个未删除的对象
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
谢谢你的澄清。重现--没有泄漏信息,原因在此。

优化器在这里进行了过度优化,因为没有对new操作符 中创建的内存或指针进行操作,这个内存的分配被移除。

我们将考虑是否在优化器中修复这个 "错误",或者对其进行改进,以便将一个指针保存到一个未使用的变量中,不会阻止删除新的操作。

 
下午好。
请告知开发人员,为什么MQL4和MQL5具有从专家顾问中删除指标子窗口的功能,而他们却没有创建指标窗口的功能。
我必须使用模板或手动启动窗口指标,这并不方便,因为图表上的信息会丢失。
我还希望能够从一个资源文件中启动和显示指标。
或者建议如何去做。
 
Slawa:

你不是那个组织 "可视化提示 "的人吗?

你为什么认为这是一个错误呢?文件夹的名称与进行连接的端口号相对应。

这是我.....谢谢,知道了。
 
做一个宏
#define  MACROS(A) "##A##"
我想让MACROS(Num)被 "Num "取代,但结果总是 "##A###"。是否可以定义一个宏来获得我想要的东西?

 

我为自己做了一个小小的发现

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

如果你在Integer * Point(没有归一化)开了一个订单,然后要求开盘价,它将与非归一化的Integer * Point不同。

为什么OrderSEnd总是使用非标准化的Integer * Point价格?

 
fxsaber:
我在做一个宏,我想让MACROS(Num)被 "Num "取代,但结果总是 "##A###"。是否可以定义一个宏来获得我想要的东西?

移除宏主体中的反转逗号

要将宏参数转换为字符串,请使用#。

#define  MACROS(A) #A
##是用来串联标记的。