错误、漏洞、问题 - 页 1875 1...186818691870187118721873187418751876187718781879188018811882...3184 新评论 Koldun Zloy 2017.04.25 09:40 #18741 可能是因为你在OnStart()函数 中手动调用它。静态对象的析构器在此函数之后按声明的相反顺序调用。 fxsaber 2017.04.25 09:47 #18742 Koldun Zloy:可能是因为你在OnStart()函数 中手动调用它。静态对象的析构器在此函数之后按声明的相反顺序调用。 看来,这里的一切都应该正常工作template <typename T> struct PTR { T* Ptr; PTR( void ) { } void operator =( T* &Value ) { this.Ptr = Value; } ~PTR( void ) { Print(__FUNCSIG__); delete this.Ptr; } }; class CLASS { private: static PTR<CLASS> Ptr; static CLASS* Tmp; CLASS() { CLASS::Ptr = CLASS::Tmp; } }; static PTR<CLASS> CLASS::Ptr; static CLASS* CLASS::Tmp = new CLASS; void OnStart() { }但是泄漏确实发生了。问题出在哪里? Koldun Zloy 2017.04.25 09:55 #18743 fxsaber: 我认为这里的一切都必须正常工作但是泄漏正在发生。问题出在哪里? 你创建了两个对象,只删除了一个。为什么你需要CLASS::Tmp 对象? fxsaber 2017.04.25 10:13 #18744 Koldun Zloy: 你创建了两个对象,只删除了一个。在什么时候,两个对象被创造出来?为什么你需要一个CLASS::Tmp 对象?多亏了你,没有必要。但为了理解语言,我还是想了解为什么这个例子会导致泄漏。不过,带有隐藏构造函数的隐藏对象在某些情况下是符合逻辑的(可能是最普遍的一种)。 Koldun Zloy 2017.04.25 10:30 #18745 是的,我错了。你只有一个对象被创建而没有被删除。因为当你调用构造函数时 CLASS() { CLASS::Ptr = CLASS::Tmp; } CLASS::Tmp仍然包含垃圾,而不是对象的地址。 Sergey Dzyublik 2017.04.25 10:36 #18746 1) 创建静态PTR<CLASS> CLASS::Ptr结构。 2) 类被创建,新的CLASS;它执行构造函数CLASS(),CLASS::Ptr被分配为Null 3) CLASS::Tmp值由指向新CLASS的指针更新。 4) 删除PTR<CLASS>结构CLASS::Ptr;执行析构器,试图删除CLASS::Ptr(它是Null)。 fxsaber 2017.04.25 10:45 #18747 Koldun Zloy:CLASS::Tmp仍然包含垃圾,而不是一个对象地址。谢谢你!不知为何,我没有注意到这个明显的问题。谢尔盖-迪尤布利 克。 1) 一个静态PTR<CLASS> CLASS::Ptr结构被创建。 2) 创建一个类,new CLASS;运行构造函数CLASS(),CLASS::Ptr被分配为Null 3) CLASS::Tmp值由指向新CLASS的指针更新。 4) 删除PTR<CLASS>结构CLASS::Ptr;执行析构器,试图删除CLASS::Ptr(它是Null)。谢谢你。但它不是Null,是垃圾。 Dmitriy Skub 2017.04.25 11:31 #18748 如果模式是这样就好了ChartSetInteger( 0,CHART_SHOW,false );模式将不显示交易 的箭头(进场/出场)。那里根本不需要他们。 Aleksey Mirlachev 2017.04.25 13:51 #18749 我是一个新手,想订一份工作,现在我的余额为0,我可以开一个主题吗?还是我必须在开始时给我的账户充值? 当他们从我的账户中冻结资金时,我有点困惑。 [删除] 2017.04.25 14:26 #18750 The service is unavailable. 去买一些缬草酊剂......( 1...186818691870187118721873187418751876187718781879188018811882...3184 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
可能是因为你在OnStart()函数 中手动调用它。
静态对象的析构器在此函数之后按声明的相反顺序调用。
可能是因为你在OnStart()函数 中手动调用它。
静态对象的析构器在此函数之后按声明的相反顺序调用。
但是泄漏确实发生了。问题出在哪里?
我认为这里的一切都必须正常工作
但是泄漏正在发生。问题出在哪里?
你创建了两个对象,只删除了一个。
为什么你需要CLASS::Tmp 对象?
你创建了两个对象,只删除了一个。
在什么时候,两个对象被创造出来?
为什么你需要一个CLASS::Tmp 对象?
多亏了你,没有必要。但为了理解语言,我还是想了解为什么这个例子会导致泄漏。
不过,带有隐藏构造函数的隐藏对象在某些情况下是符合逻辑的(可能是最普遍的一种)。
是的,我错了。你只有一个对象被创建而没有被删除。
因为当你调用构造函数时
CLASS::Tmp仍然包含垃圾,而不是对象的地址。
2) 类被创建,新的CLASS;它执行构造函数CLASS(),CLASS::Ptr被分配为Null
3) CLASS::Tmp值由指向新CLASS的指针更新。
4) 删除PTR<CLASS>结构CLASS::Ptr;执行析构器,试图删除CLASS::Ptr(它是Null)。
CLASS::Tmp仍然包含垃圾,而不是一个对象地址。
谢谢你!不知为何,我没有注意到这个明显的问题。
1) 一个静态PTR<CLASS> CLASS::Ptr结构被创建。
2) 创建一个类,new CLASS;运行构造函数CLASS(),CLASS::Ptr被分配为Null
3) CLASS::Tmp值由指向新CLASS的指针更新。
4) 删除PTR<CLASS>结构CLASS::Ptr;执行析构器,试图删除CLASS::Ptr(它是Null)。
谢谢你。但它不是Null,是垃圾。
如果模式是这样就好了
模式将不显示交易 的箭头(进场/出场)。那里根本不需要他们。