エラー、バグ、質問 - ページ 1873

 
Stanislav Korotky:
最新のビルドでは、EAコードの変更と再コンパイルがテスターに拾われないバグは修正されましたか?新しいバージョンのex5のテストを開始するために、ターミナルを閉じて開き直さなければならないのです。そうでない場合は、古いバリアントがテストされます。
Expert Advisor を編集して CTRL+F5 を押すか、Strategy Tester で直接操作すると、適切な結果を得ることができます。
 
fxsaber:
Expert Advisor を編集し、CTRL+F5 またはテスターで直接、適切な結果を見ることができます。
Ctrl+F5がデバッグですよね?私の問題は、デバッグではなく、簡単なテストを実行することです。
 
Stanislav Korotky:
Ctrl+F5がデバッグですよね?私の問題は、デバッグではなく、簡単なテストを実行することです。
ビジュアルがないと、編集の後に走ってしまうので、大丈夫です。
 
fxsaber:

クローズドコンストラクタで隠し クラスオブジェクトを 作成する方法は?

こうしてリークが来ているのです。

このような状況でデストラクタを呼び出す方法は明確ではありません。シングルトンはそれではない。

閉じたコンストラクタを持つクラスオブジェクトは、そのクラスの特別な静的関数を使用してのみ作成することができます。

現在、コンパイラは引用されたコードに悪態をつくことはありませんが、将来的には必ず修正されるでしょう。

スマートポインタを使用してデストラクタを呼び出すことができます。

デストラクタはオープンでなければならない。

 
Koldun Zloy:

閉じたコンストラクタを持つクラスのオブジェクトは、そのクラスの特別な静的関数を使用してのみ作成することができます。

現在、コンパイラは引用されたコードに悪態をつくことはありませんが、将来的には必ず修正されるでしょう。

この場合、提案された静的メソッドは、本質的にはコンストラクタになるため、ある種の自己欺瞞になります。明示的に呼び出す必要があります。

スマートポインタを使用してデストラクタを呼び出すことができます。

デストラクタはオープンでなければならない。

スマートポインターとは?
 

コンストラクタをprivateにすることが確実な場合は、それ以外の方法はありません。

スマートポインターは、単純なポインターを含むオブジェクトで、時間内に削除されることを保証するものです。

class MyClass
{
public:
   MyClass();
};

struct MyClassPtr
{
   MyClass* pMyClass;

   MyClassPtr( MyClass* myClass ) : pMyClass( myClass )
   {
   }
   ~MyClassPtr()
   {
      delete pMyClass;
   }
};

これは最もシンプルな選択肢です。

また、より複雑なスマートポインタも存在します。

この本には、それらについてとてもよく書かれています。https://rsdn.org/res/book/cpp/cpp_real_programmers.xml

C++ : библиотека программиста
  • rsdn.org
Глава 5. Умные указатели Глава 6. Ведущие указатели и дескрипторы Глава 7. Грани и другие мудрые указатели Глава 8. Коллекции, курсоры, итераторы Глава 9. Транзакции и гениальные указатели
 

コードをコンパイルするために何が足りないのか。

class CMyClass
  {
public:
   void* core;
   CMyClass(void) : core(NULL) { }
   template<typename T>
   void Create(T* a_ptr) {
      core = dynamic_cast<T *> (a_ptr);
   }
  };

class CCore
  {
public:
   int var;
   CCore(void) : var(3) { }
  };


int OnInit() {
   CCore *_point_1 = new CCore();
   CMyClass _obj;
   _obj.Create(_point_1);
   int _val = _obj.core.var;
   
   delete _point_1;
//---
   return INIT_SUCCEEDED;
}

この変種は 'var' を書きます - 構造体のメンバは未定義です。

PS.エラーが発生しました ))

int _val = dynamic_cast <CCore *>(_obj.core).var;


 
void*は、どの言語でのビルドからですか?
 
fxsaber:
void* どのビルドの言語から?

そこで、インターフェイスの登場である。
 
Sergey Dzyublik:

インターフェイスが来たとき
ありがとうございます。しかし、すぐにエラーが発生しました
struct PTR
{
  void* Ptr; // internal error #40
};