Perguntas sobre OOP em MQL5 - página 5

 
Comentários não relacionados a este tópico foram movidos para"Quaisquer perguntas de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos".
 
Vladimir Simakov:
Vamos lá! Eu a uso o tempo todo.

Onde? Em que lugar e como?

Moderadores, desculpem por repetir a pergunta. Eu realmente quero ter uma resposta para isso.

 
Artyom Trishkin:

Por que você reatribuiria intencionalmente um ponteiro passado para uma função? É claro, haverá um vazamento. Mas isto não é um "vazamento clássico", mas um erro clássico de trabalhar com um ponteiro para um objeto.

Você não precisa criar um novo objeto aqui, mas manipular o objeto externo para o qual o ponteiro foi passado para a função.

Este não sou eu. É tirado do código de outra pessoa neste tópico. É tomado como um exemplo.
 
Dmitry Fedoseev:

Onde? Em que lugar e como?

Moderadores, desculpem por repetir a pergunta. Eu realmente quero ter uma resposta para isso.

Tenha paciência. Chegarei em casa e afixarei.
 
Dmitry Fedoseev:

Onde? Em que lugar e como?

Moderadores, desculpem por repetir a pergunta. Eu realmente quero ter uma resposta para isso.

Se entendi corretamente a pergunta, declaramos a classe como um objeto usando novo.
Em seguida, use um ponto para chamar os métodos públicos da classe através do objeto criado.
Depois que todos os métodos chamados são executados, apagamos a memória apagando o objeto criado.

 
Roman:

Se entendi a pergunta corretamente, declaramos a classe como um objeto usando novo.
Então chamamos os métodos públicos da classe através do objeto criado, usando um ponto.
Depois que todos os métodos chamados são executados, apagamos a memória apagando o objeto criado.

Não. No início pensei que era um parâmetro de função como este - objeto, mas não por referência, mas há um ponto-e-vírgula no final. Se é uma criação de objeto normal na declaração, então por que está entre parênteses? Portanto, por enquanto, continua sendo o mistério do século.

 
Dmitry Fedoseev:

Não. No início pensei que era um parâmetro de função como este - objeto, mas não por referência, mas há um ponto-e-vírgula no final. Se é uma criação de objeto normal na declaração, então por que está entre parênteses? Portanto, por enquanto, continua sendo o mistério do século.

Entre parênteses - porque é uma nota sobre o texto))))
 
Artyom Trishkin:

E por que você deliberadamente reatribuiu um ponteiro passado para uma função? É claro, haverá um vazamento. Mas não é um "vazamento clássico", mas um erro clássico de manipulação de um ponteiro para um objeto.

Não é necessário criar um novo objeto aqui, mas manipular o objeto externo para o qual o ponteiro foi passado para a função.

Não se trata do meu exemplo, trata-se da implementação dos próprios ponteiros na MQL - se você não precisar desreferenciá-los (e o ponteiro pode ser atribuído a uma instância do objeto!), se ao invés de passar um ponteiro você pode passar uma referência ao objetohttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665

aqui não temos informações detalhadas sobre onde e quando (CObj& obj) apareceu (& não é uma operação de desreferenciamento de ponteiro, mas a aquisição de um ponteiro GetPointer() )

Ok, eu não quero desperdiçar nenhuma informação... Eu já disse a mim mesmo, e vou repetir mais uma vez neste fórum - MQL não é C++, é assim que é implementado - bem, eu não tenho outras opções

 
Igor Makanu:

Não se trata do meu exemplo, trata-se da implementação dos próprios ponteiros na MQL - se você não precisar desreferenciá-los (e o ponteiro pode ser atribuído a uma instância do objeto!), se ao invés de passar um ponteiro você pode passar uma referência ao objeto https://www.mql5.com/ru/forum/1111/page2471#comment_11796665

aqui não temos informações detalhadas sobre onde e quando (CObj& obj) apareceu (& não é uma operação de desreferenciamento de ponteiro, mas a aquisição de um ponteiro GetPointer() )

Ok, eu não quero desperdiçar nenhuma informação... Eu já disse a mim mesmo, e vou repetir mais uma vez neste fórum - MQL não é C++, é assim que é implementado - bem, eu não tenho outras opções

Você está sendo dramático, não há complexidades e confusões.

 
Vladimir Simakov:
Os parênteses são porque esta é uma nota sobre o texto))))

Então, aí está.

Assim:

void z(CObj * o){
}

Não só pode, mas melhor, porque você pode chamá-lo assim:

CObj obj;
z(GetPointer(obj));

Se você passar um ponteiro por referência, você precisa de outra variável para o ponteiro.

***

E se um ponteiro precisa ser passado para uma função para criar um objeto na função, é assim que ela funciona:

class CObj{
   public:
   int f(){
      return(33);
   }
};

CObj * obj;

void OnStart(){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
Isso é basicamente tudo o que você queria saber sobre o OOP, mas tinha medo de perguntar))))
Razão: