記事"MQL5でのオブジェクト作成と削除の順番"についてのディスカッション - ページ 3 123 新しいコメント Arturo Hugo Ninamango 2022.08.15 02:43 #21 ファイルlocalvar_testscript_4.mq5で GetPointer()を呼び出した後にポインタ・タイプを表示すると、ポインタがPOINTER_DINAMICではなくPOINTER_AUTOMATIC であることがわかります。 m_array[i]=GetPointer(array[i]); Print(EnumToString(CheckPointer(m_array[i]))); POINTER_DINAMICではなく //POINTER_AUTOMATIC したがって、この行は決して実行されない。 if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]); Evgeniy Chernish 2023.10.04 18:49 #22 <引用 この宣言順序では、items_ arrayは オブジェクトの配列 array [5] が破棄される前に破棄される。items_arrayの デストラクタから呼び出されるDestroy()関数では、まだ存在するオブジェクトへのポインタで処理が行われるため、エラーは発生しません。 皆さん、こんにちは! このあたりからロジックが全く理解できなくなってきました。=) 結局のところ、Destroyメソッドではポインタの型を動的な型と比較しています。そして、私たちの型は自動的です。したがって、delete演算 子は使われません。 自動生成されたオブジェクトは自動的に削除されるからだ。 そして最後に、このファイルはクラス外のメソッドを実装する段階で、DestroyメソッドとSetArrayメソッドの戻り値の型をvoidに指定するのを忘れていた。 初心者(私のような)は怖いかもしれない =) void CItemArray::Destroy(void) { for(int i=0;i<ArraySize(m_array);i++) { if(CheckPointer(m_array[i])!=POINTER_INVALID) { if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]); } else Print("Invalid pointer to delete"); } } 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ファイルlocalvar_testscript_4.mq5で
GetPointer()を呼び出した後にポインタ・タイプを表示すると、ポインタがPOINTER_DINAMICではなくPOINTER_AUTOMATIC であることがわかります。
したがって、この行は決して実行されない。
<引用
この宣言順序では、items_ arrayは オブジェクトの配列 array [5] が破棄される前に破棄される。items_arrayの デストラクタから呼び出されるDestroy()関数では、まだ存在するオブジェクトへのポインタで処理が行われるため、エラーは発生しません。
皆さん、こんにちは!
このあたりからロジックが全く理解できなくなってきました。=)
結局のところ、Destroyメソッドではポインタの型を動的な型と比較しています。そして、私たちの型は自動的です。したがって、delete演算 子は使われません。
自動生成されたオブジェクトは自動的に削除されるからだ。
そして最後に、このファイルはクラス外のメソッドを実装する段階で、DestroyメソッドとSetArrayメソッドの戻り値の型をvoidに指定するのを忘れていた。
初心者(私のような)は怖いかもしれない =)