MQL5中的OOP问题 - 页 74

 
Vladimir Simakov:

这里没有指针)有一个类的句柄,用它工作类似于用指针工作,但这是共同点的结束。

我好奇的心和调皮的手让我忙了两天两夜。

我试着把动态创建的对象移出范围--在函数中,摸索方法,但最后我得到了解决方案。

class CTest
{
public:
   ~CTest() { Print(__FUNCTION__); }
};
//+------------------------------------------------------------------+
void OnStart()
{
   CTest* _test = new CTest;
   deleteCTest(_test);
}
//+------------------------------------------------------------------+
void deleteCTest(CTest* &t)
{
   delete t;
}

删除它,但我不能像这样弄清楚....我还没有找到任何类似的函数签名来传递指针


这里有另一个问题。

我怎样才能通过引用返回一个对象的指针作为函数的结果?

我想做这样的事情。

CTest ret_CTest()
{
   CTest *result = new CTest;
   return(result);
}


可以毫无问题地 返回CTest *,但我写的 ret_CTest()--它给出了一个错误

 
Igor Makanu:

两天两夜,我好奇的心和淘气的手让我忙得不可开交。

试着把动态创建的对象移出 范围--在函数中,直觉方法,但最终得到了解决。

它是这样删除的,但我不能像这样搞清楚....我在帮助中没有找到任何类似的传递指针的函数签名。

你说它不在范围内是什么意思? 你把它传到一个函数里,所以它在那里是可见的)

s.s.void deleteCTest(CTest* &t)没有那个&应该也能工作,对吗?

要真正在它被创建的范围之外删除它,而且可能是自动删除,你需要...嘘...在任何人听到之前...模式工厂......阅读速度更快,删除......

 

Igor Makanu:


但如何通过引用返回一个对象的指针作为一个函数的结果?

你可以顺利地 返回CTest *,但是我写的 ret_CTest()--它给出了一个错误
如果你想要犹太教
CTest& Foo();
,还没有,但如果要的话:
CTest Foo();

如果一个类有一个拷贝构造函数,那么它就应该有一个拷贝构造函数。

CTest(CTest &other)...
 
Aleksey Mavrin:

s.w.void deleteCTest(CTest* &t) 没有这个&应该也能工作,还是不行?

看看吧,你会学到新东西的;)

我已经写过很多次,MQL指针是一个非常有指导意义的东西:)))


弗拉基米尔-西马科夫
,如果你想要犹太教,还没有,但如果有。

如果你想使用一个指针,该类必须有一个拷贝构造函数。

再次,我需要思考

我怀疑GetPointer() 可能会做一些手脚...但它不是一个事实....这些 "穿越时空的跳跃"--通过MQL中的指针和隐含的解除引用--已经超出了我的想象!(((

 
Igor Makanu:

看看吧,你会学到很多;)

我已经写过很多次,MQL中的指针是一个非常有指导意义的东西))))。

它删除了指针,但它不能给_test分配一个新的值。顺便说一下,MQL与此无关)))

 
Igor Makanu:

看看吧,你会学到很多;)

我已经反复告诉你,MQL中的指针是非常有指导意义的))))。


再次,我需要思考

我怀疑GetPointer()可能会做一些手脚...但它不是一个事实....这些 "穿越时空的跳跃"--通过MQL中的指针和隐含的解除引用--已经超出了我的想象!(((

在这里可以))))只需关闭锐利度,这里甚至没有一丝一毫的锐利度))))。

 
Igor Makanu:

看看吧,你会学到很多;)

我已经反复告诉你,MQL中的指针是非常有指导意义的))))。

我检查了一下。它的删除效果很好,没有&)

我在MT4和MT5中试了一下,比较一下 )

class CTest
{
public:
   CTest() { Print(__FUNCTION__); }
   ~CTest() { Print(__FUNCTION__); }
};
//+------------------------------------------------------------------+
void OnStart()
{
   CTest* _test = new CTest();
   deleteCTest(_test);
}
//+------------------------------------------------------------------+
void deleteCTest(CTest* t)
{
   delete t;
}
 
Aleksey Mavrin:

检查得很好。它完美地删除了,没有&)

我在MT4和MT5中试了一下,比较一下 )

这不是一个完整的例子,我今天遇到了这个问题。

如果没有&,它将无法工作。

class CTest
{
public:
   ~CTest() { Print(__FUNCTION__); }
};
//+------------------------------------------------------------------+
void OnStart()
{
   CTest* _test = new CTest;
   deleteCTest(_test);
   delete _test;
}
//+------------------------------------------------------------------+
void deleteCTest(CTest* & t)
{
   delete t;
   t = new CTest;
}
//+------------------------------------------------------------------+

Vladimir Simakov:

我在这里很好)))。我不是在找利器,但我相信没有&))也可以。


我不是在找夏普,我还在和MQL打交道,我可能会问我不懂的地方。

 
Igor Makanu:

不是一个完整的例子,我今天遇到了它。

不这样做是不行的

当然会的。你是通过值传递一个指针,因此将创建一个指针的副本。你将用它来钉住对象,并为函数中创建的指针创建一个新对象。这是c++,欢迎))))
 
Igor Makanu:

不是一个完整的例子,今天看到的是

没有&是不行的



在我看来,这与引用无关,只是因为如果你想在函数运行后保存数值,函数参数 必须通过指针传递。 同样的情况会发生在文件或指标句柄上,它们不是引用。

这一直是C++中的标准,尽管我已经很久没有依稀记得了。