巴解组织。应用问题 - 页 13

 
TheXpert:
给我看一个例子,这样就不会有混淆了,然后我再回答。

//1-ый вариант. Переменная-член strA инициализируется автоматически
class A
  {
public:
   string            strA;
                     A(void) { Print("strA=",strA); };
                    ~A(void){};
  };
//2-ой вариант. Переменная-член strB инициализируется при помощи инициализатора пользовательским значением
class B
  {
public:
   string            strB;
                     B(const string str) : strB(str) { Print("strB=",strB); }
                    ~B(void){};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   A a1;
   B b1("Пользовательское значение");
  }

一个例子很简单。假设15个 "计算机周期 "花在自动初始化a1.strA成员上,我得出一个初步结论,15个周期也花在初始化b1.strB成员上。这是否正确?

 

标准库CExpert 类中,有这些受保护的声明

//--- trading objects
CExpertTrade     *m_trade;    // trading object
CExpertSignal    *m_signal;   // trading signals object
CExpertMoney     *m_money;    // money manager object
CExpertTrailing  *m_trailing; // trailing stops object

同时,该对象的构造函数包含以下字符串

m_trade    =NULL;
m_signal   =NULL;
m_money    =NULL;
m_trailing =NULL;

我试图在我的类中创建类似的东西,但没有任何进一步的初始化(如Init和InitXXX)

编译器编译了一切,没有任何警告或错误,但它有一个关键错误281 (无效的指针访问),EA被从图表中删除。

在这方面,我有一些问题。

1.我应该在构造函数中做什么(指定NULL或指定特定对象的指针)?

2.InitTrade 类型指针的初始化是强制性的吗?

 
Interesting:

标准库CExpert 类中,有这些受保护的声明

同时,该对象的构造函数包含以下字符串

我试图在我的类中创建类似的东西,但没有任何进一步的初始化(如Init和InitXXX)

编译器编译了一切,没有任何警告或错误,但当我试图在图表上安装EA时,却出现了281号 关键错误 (无效的指针访问),EA被从图表上删除。

在这方面,我有一些问题。

1.我应该在构造函数中做什么(指定NULL或指定特定对象的指针)?

2.InitTrade 类型指针的初始化是强制性的吗?

1.这两个人都是正确的。这完全取决于类的特定实现(不是特别指CExpert)。然而,最好在InitXXX 方法中创建动态对象,该方法返回bool(因为构造函数不返回执行结果,你必须重置初始化标志,然后分析它(该标志)。

2.当然是这样。否则,将发生关键错误281 (无效的指针访问)。

PS。顺便说一句,谢谢。我必须在使用前插入指针检查。

 
Yedelkin:

一个例子很简单。假设15个 "计算机周期 "花在自动初始化a1.strA成员上,我得出一个初步结论,15个周期也花在初始化b1.strB成员上。这是否正确?

不,这根本不是战术的问题。或者,也许这并不是真的关于时钟。
 
TheXpert:
不,这根本不是时钟的问题。好吧,或者不是真的关于时钟。

好吧,那么一个非常简单的问题:在时间上初始化哪个更快,是上面例子中的成员a1.strA还是成员b1.strB?

或者读什么 "逐点"?物理上没有办法在 "机器-处理器 "层面上学习编程。

 
Yedelkin:

好吧,那么一个非常简单的问题:在时间上初始化哪个更快,是上面例子中的成员a1.strA还是成员b1.strB?

或者读什么 "逐点"?物理上没有办法在 "机器-处理器 "层面上学习编程。

a1.strA的初始化速度会更快,因为它的初始化过程只是在原地调零。对于b1.strB,将进行内存分配。

然而,这种差异是相当难以衡量的,因为考虑到围绕初始化的代码,它远远小于百分之一。

 
Yedelkin:

这使得初始化速度更快

该问题是不正确的。
 
stringo:

对于b1.strB,将进行内存分配。

给你,谢谢--我的逻辑中缺少的环节。

TheXpert,谢谢你的帮助。试图用我自己的话来解释这个问题。我同意,一个真正正确的问题是由那些知情者提出的。但他们通常不问我的水平问题 :)

 
uncleVic:

1.它在两个方面都是正确的。这完全取决于该类的具体实现(不是特别指CExpert)。然而,最好在InitXXX 方法中创建动态对象,该方法返回bool(因为构造函数不返回执行结果,我们将不得不重置/取消初始化标志,然后分析它(该标志)。

2.当然是这样。否则出现 关键错误281 (无效的指针访问)。

PS。顺便说一句,谢谢。我必须在使用前插入指针检查。

谢谢你,现在一切都在其位置上。然而,还有一个问题,我们假设281号错误发生了,但最好不要卸下专家顾问。我应该怎么做?

让我澄清一下我的问题--如果在初始化的所有步骤后出现281个错误,但它不会严重影响智能顾问的主要工作,根本无法运行它,该怎么办?

 
Interesting:

假设发生错误281,但最好是不卸载EA。那我们应该怎么做?

让我澄清一下我的问题:如果在所有的初始化步骤后出现281号错误,但它不会严重影响专家顾问的主要工作,根本不会运行它,该怎么办?

"无效的指针访问" =="试图访问一个无效的指针"?如果是,那么

试图访问一个无效的指针会导致 程序崩溃。这就是为什么在使用指针之前需要使用CheckPointer() 函数。在下列情况下,一个指针可能是无效的

  • 指针NULL
  • 如果该对象已被删除
  • 操作符销毁。