Perguntas sobre OOP em MQL5 - página 85

 
Esta não é a primeira vez que me pego pensando que na MQL é melhor usar OOP somente quando absolutamente necessário e somente em uma determinada parte do código.
 
Pavel Verveyko:
Esta não é a primeira vez que me pego pensando que na MQL é melhor usar o OOP somente em caso de necessidade urgente e somente em uma determinada seção de código.
Quem na terra lhe deu uma idéia tão estúpida? Se você não gosta de gatos, simplesmente não pode cozinhá-los))))
 

Eu li em algum lugar e um exemplo apareceu no fórum com tal construção

delete &this;

alguém pode fazer um exemplo simples com isto?

Estou interessado no que esta exclusão &this deletes;

 
Igor Makanu:

Eu li em algum lugar e um exemplo apareceu no fórum com tal construção

alguém pode fazer um exemplo simples com isto?

Estou interessado no que esta exclusão &this deletes;

Ela se apaga))))

 
Vladimir Simakov:

Ela se retira))))

que faz sentido

mas suspeito que o objetivo é usá-lo com métodos estáticos

necessidade de testá-lo, realmente não sei como, é por isso que eu perguntei


UPD: ontem no Google este tópico, muitas referências ao destruidor privado, também precisam pensar no que ele pode fazer

 
Igor Makanu:

1) mas desconfio que o objetivo é "apagar e isto". - usar com métodos estáticos
2) ontem pesquisaram no Google este tópico, muitas referências ao destruidor privado, também precisam pensar no que ele pode proporcionar

1) A partir de métodos estáticos, o acesso a isto é proibido.
Onde está "apagar e isto";" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) O destruidor privado não permite criar um objeto na pilha, mas um objeto ainda pode ser criado através do novo operador, desta vez na pilha:

class A{
   ~A(){printf(__FUNCSIG__);}
public:
    void Delete(){
        delete &this;
    }
};

void OnStart() {
   A* a_ptr = new A();
   a_ptr.Delete();
}

Aqui está um outro uso de apagar &isto.

 
Sergey Dzyublik:

1) A partir de métodos estáticos, o acesso a isto é proibido.
Onde fazer "apagar e isto;" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Um destrutor privado proíbe a criação de um objeto na pilha, mas um objeto ainda pode ser criado através do novo operador, desta vez na pilha:

Aqui está um outro uso de apagar &isto.

Você sempre pode fazer algo com alguma coisa. Mas qual é o objetivo?

Você deve inventar um nome, declará-lo como um padrão de design. e é isso. É tão legal escrever um monte de código em vez de apenas "apagar algo".

 
Um destruidor privado protege seus empreendimentos de diletantes. Afinal de contas, você só pode usar o OOP com eles de uma forma madura - com novo e excluir. A propósito, você já pensou em um nome para o "padrão"?
 
Dmitry Fedoseev:
Você realmente tem um apelido muito apropriado ))
 
Igor Makanu:

Eu li em algum lugar e um exemplo apareceu no fórum com tal construção

alguém pode fazer um exemplo simples com isto?

Estou interessado no que esta exclusão &this deletes;

este é um ponteiro para o objeto atual.

Normalmente a eliminação desta construção é usada onde um objeto é criado por novo, mas a responsabilidade pela eliminação está sobre o próprio objeto. Neste caso, quando o objeto decide que não é mais necessário, ele chama a função de desinicialização, na qual ele se apaga assim.

Na minha opinião, esta é uma prática extremamente perigosa, aceitável apenas no caso de pontos inteligentes que contarão referências ao próprio objeto e então, quando o número de referências se torna zero, eles podem apagar a si mesmos. Mas mesmo neste caso, parece-me que há espaço para erros de vazamento de memória difíceis de encontrar.

Na minha opinião, a responsabilidade pela eliminação deveria recair sobre o mesmo objeto que o criou. Ele pode usar o padrão de fábrica do objeto ao criá-lo, mas a exclusão ainda deve ser de responsabilidade do objeto que criou o novo objeto.

Razão: