Erros, bugs, perguntas - página 1873

 
Stanislav Korotky:
Nas últimas compilações, já corrigiu o erro de que a alteração e recompilação do código EA não é captado pelo testador? Tenho de fechar e reabrir o terminal para que a nova versão do ex5 possa começar a ser testada. Caso contrário, a antiga variante é testada.
Edito o Expert Advisor e ou CTRL+F5, ou directamente no Strategy Tester, ver o resultado adequado.
 
fxsaber:
Edito o Expert Advisor e através de CTRL+F5 ou directamente no testador, vejo resultados adequados.
Ctrl+F5 está a depurar, certo? O meu problema não é com a depuração, mas com a realização de um teste simples.
 
Stanislav Korotky:
Ctrl+F5 está a depurar, certo? O meu problema não é com a depuração, mas com a realização de um teste simples.
Sem visuais corro depois das edições - tudo bem.
 
fxsaber:

Como é que crio um objecto de classe oculto com um construtor fechado?

É assim que as fugas estão a chegar.

Não é claro como chamar um destruidor nesta situação. Singleton não é isso.

Um objecto de classe com um construtor fechado só pode ser criado usando uma função estática especial dessa classe.

Embora o compilador não esteja actualmente a jurar pelo código que citou, isto será definitivamente corrigido no futuro.

Pode usar um ponteiro inteligente para chamar o destruidor.

O destruidor deve estar aberto.

 
Koldun Zloy:

Um objecto de uma classe com um construtor fechado só pode ser criado usando uma função estática especial dessa classe.

Embora o compilador não esteja actualmente a jurar pelo código que citou, isto será definitivamente corrigido no futuro.

O método estático proposto neste caso será uma espécie de auto-engano, porque será um construtor na sua essência. Terá de lhe chamar explicitamente.

Pode usar um ponteiro inteligente para chamar o destruidor.

O destruidor deve estar aberto.

O que é um ponteiro inteligente?
 

Se tiver a certeza de que o construtor deve ser privado, não há outra forma.

Um ponteiro inteligente é um objecto que contém um simples ponteiro e assegura que é removido a tempo.

class MyClass
{
public:
   MyClass();
};

struct MyClassPtr
{
   MyClass* pMyClass;

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

Esta é a opção mais simples.

Existem também apontadores inteligentes mais complexos.

Está muito bem escrito sobre eles neste livro: https://rsdn.org/res/book/cpp/cpp_real_programmers.xml

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

o que falta para fazer a compilação do código:

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;
}

esta variante escreve 'var' - membro estruturante indefinido

PS. obteve o erro ))

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


 
vazio* a partir do qual construir na língua?
 
fxsaber:
nula* desde que construída na língua?

foi quando as interfaces apareceram
 
Sergey Dzyublik:

quando as interfaces entraram.
Obrigado. No entanto, encontrei imediatamente um erro
struct PTR
{
  void* Ptr; // internal error #40
};