MQL5中的OOP问题 - 页 86

 
Igor Makanu:

有道理

但我猜想,整个意义在于将它与静态方法 一起使用

我需要测试它,但我不知道怎么做,所以我问道


UPD: 昨天在网上搜索了这个话题,很多人提到了私有析构器,也需要思考它能做什么?

静态方法没有this指针,也不能通过该指针做任何事情。

私有的析构器保证了该对象将被该对象本身所删除。但正如我在上面所说的,在我看来,这并不是一个值得避免的好做法(虽然,有时它很方便,而且在SEVERAL情况下,使用它是可以接受的)。

 
Georgiy Merts:

静态方法没有this指针,不能对这个指针做任何事情。

我可能误解了你的意思,但我知道这个方法没有指针,只有对象实例本身有,我写这个是因为从静态方法中可以得到类的字段,而且很可能你可以用删除的方式进行操作。

目标是看这个设计,我从来没有尝试过,而且这不是一个常见的方式。


Sergey Dzyublik:

1)从静态方法中,禁止对其进行访问。
哪里有 "删除&this;"?- https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2)私有的析构器禁止在堆栈中创建对象,但你仍然可以通过new操作符来创建,这次是在堆中。

这里是删除&this的另一种用法。

谢谢,我去看看,这很有用。




忙,都在修,我以后再问......。如果一个基类中有一个带有 "我 "字的方法,会发生什么?

delete &this;

并从一个派生类中调用一个方法,基类的删除....。没有实际用途,但现在我想把它弄清楚

 
Igor Makanu:

我可能误解了你的意思,但我知道方法没有this指针,只有对象本身的实例有,我写它是因为类的字段可以从静态方法中获得,而且很可能你可以用删除来操作

到目前为止,看这个设计的目的,我从来没有尝试过,这不是一个常见的方式。


谢谢,我去看看,这很有帮助。




忙,都在修,我以后再问......。如果一个基类中有一个带有 "我 "字的方法,会发生什么?

并从一个派生类中调用一个方法,基类的删除....。没有实际用途,但现在我想把它弄清楚

不用麻烦了,你永远不会需要它。

在处理这种事情之前,你需要了解语言的基本知识

 
Koldun Zloy:

不用麻烦了,你永远不会需要它。

这种说法并不正确,如果你不扩大你的视野,当然就不需要了。

Koldun Zloy:

在处理这种事情之前,你需要了解语言的基本知识

我尽可能多地这样做,但总的来说,我解决了90%以上的MQL-问题,这些问题通常是典型的,而且大多数已经被解决了,可以免费获得。



关于删除&this; .........我使用了一个监控其开仓的类订单,并在重新报价时能够重新开仓......。...以及其他许多事情。

我从另一个类中创建并删除了这个对象(订单类),我可能发现使用delete &this;更方便

 

我不知道这是一个小故障还是一个功能)

,在类实例里面有一个结构。

我放了一个点来查看结构的内容。
但只有在我加上方括号时才会显示。
虽然结构在一个实例中。

,如果该类不是一个数组元素,问题就解决了。




和代码本身的 "打探"。

class ABC
{   
   public:         
           struct ST
           {    
              int r;
              int U;
                  ST() {r=0; U=0;}           
           };
           ST st;
};
ABC abc[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

abc[0].st.r;

   return(INIT_SUCCEEDED);
  }
 
Pavel Verveyko:

我不知道这是一个小故障还是一个功能)

,在类实例里面有一个结构。

我放了一个点来查看结构的内容。
但只有在我加上方括号时才会显示。
虽然结构在一个实例中。

,如果该类不是一个数组元素,问题就解决了。




和代码本身的 "打探"。

这可能是正确的 :-)

 
Maxim Kuznetsov:

这可能是正确的 :-)

也许),但这并不改变关于工具提示的观点)

 
Pavel Verveyko:

我不知道这是一个小故障还是一个功能)

,在类实例里面有一个结构。

我放了一个点来查看结构的内容。
但只有在我加上方括号时才会显示。
虽然结构在一个实例中。

,如果该类不是一个数组元素,问题就解决了。




以及 "戳 "的代码本身

另一个编辑的错误(
 

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html

Везде, где это возможно, заменяйте глобальные переменные локальными.

访问全局变量比访问局部变量需要更多的命令。此外,除非另有明确说明,否则编译器假定被调用的子程序可以改变所有全局变量的值。因此,在子程序被调用后,所有全局变量的值被反复加载到内存中,这导致了性能下降。


如果你需要访问一个全局变量(该变量不为本线程和其他线程所共享),请将其值复制到一个局部变量中,并使用该副本进行工作。

使用本地拷贝会带来性能上的提升,除非全局变量只被访问一次。


如果在我的例子中。

class CEA
{
private:
   double            _Ask, _Bid;
public:
   void              onTick(const MqlTick &tick);
};
//+------------------------------------------------------------------+
void CEA::onTick(const MqlTick &tick)
{
   _Ask = tick.ask;
   _Bid = tick.bid;
}

在onTick()方法中,复制卖出和买入值,并在其余方法中使用_Ask, _Bid(虚拟交易)。

是否会像使用全局变量一样工作?

ZS: 作为一种选择,我当然可以在所有的方法中通过引用&tick来传递,但还是那句话,什么更有效?

 
Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


如果在我的例子中。

在onTick()方法中复制asc和bid值,并在其他方法中使用_Ask, _Bid(虚拟交易)。

是否会像使用全局变量一样工作?

ZS: 作为一种选择,我当然可以通过引用&tick来传递给所有的方法,但还是那句话,什么更有效?

Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


如果在我的例子中。

在onTick()方法中复制 asc 和 bid 的值,并在其他方法中使用 _Ask, _Bid (虚拟交易)

是否会像使用全局变量一样工作?

ZS: 作为一种选择,我当然可以在所有的方法中通过引用&tick来传递,但还是那句话,什么更有效?

问题。山羊的意义何在?如果在一个方法,一个类别,在一个球形的马,是的,在一个物理真空(好吧,我是醉)))),那么是的,它是有意义的。如果在一个真正的项目中,要么在全局层面上有一个类,要么有一个处理所有这些trichomudin(对不起,在处理程序的开头有一个额外的bourbon))))),而且,在任何地方直接从它那里请求)))