Ajuda com o OOP - página 4

 
Vasiliy Sokolov #:

Oficialmente, sim. Extra-oficialmente, muitas coisas indicam que ela existe:

  • Não há indicadores na MQL. Em vez disso, eles são substituídos por algo que se parece muito com eles.
  • Não há alocação direta de memória na MQL, como na C, por exemplo;
  • Os programas em MQL são executados por uma certa máquina virtual. Renat escreveu sobre isso brevemente e não uma única vez;
  • A instância de classe pode ser definida e então será automaticamente liberada. Portanto, há algum mecanismo que monitora estas instâncias e as libera quando necessário. O que é isso se não é um coletor de lixo?
  • Quaisquer instâncias inicializadas através de um ponteiro e não devidamente liberadas serão marcadas como objetos vazados na saída. Seu número e tamanho total de memória perdida serão impressos. Um programa com memória vazada não será sequer validado no Mercado. Assim, todos os objetos, mesmo os alocados manualmente, são contabilizados, conhecidos e conhecidos pelo sistema. Esta é uma das tarefas clássicas que o coletor de lixo resolve.

Há uma indicação suficiente e abrangente de que não há coletor de lixo no emcool - apagar é obrigatório após novo.

 
Dmitry Fedoseev #:

Há uma indicação suficiente e suficiente de que não há coletor de lixo no emcool - apagar é obrigatório após novo.

Até onde me lembro, um dos desenvolvedores reconheceu que existe um coletor de lixo. Mas para o usuário isso "mais ou menos não existe".

Bem, sobre o par new-delete - Eu sou a favor disso. Em caso geral, os objetos que solicitaram recursos devem ser responsáveis por eles. Há exceções, como "fábrica de objetos" - mas aí é especificamente assumido que a responsabilidade pelos objetos criados é de quem solicitou esses objetos à fábrica.

Não gosto da situação em idiomas onde há novidades e a eliminação não é necessária, pois o "sistema limpará". Isto não só reduz potencialmente o desempenho (quando objetos desnecessários ainda não são removidos), mas também relaxa o codificador, permitindo que ele não se preocupe com as conseqüências de suas ações.

 
Georgiy Merts #:

Eu realmente não gosto da situação em idiomas onde há novidades, mas não é necessário excluir, dizendo "o sistema removerá desnecessário". Isto não só reduz potencialmente o desempenho (quando objetos desnecessários ainda não são removidos), mas também relaxa o codificador, permitindo que ele não se preocupe com as conseqüências de suas ações.

A produtividade, por outro lado, é geralmente melhorada. A remoção manual leva muito tempo na linha principal. + a eliminação é feita elemento por elemento. Compare as duas versões do roteiro neste tópico, por exemplo. A diferença de velocidade é várias vezes. A eficiência da memória também aumenta. Porque o coletor de lixo move objetos compactados uns com os outros. Se você administrá-lo manualmente, ele cria furos de memória livres que não são tão fáceis de reutilizar. Além disso, o catador de lixo trabalha em um fio diferente. O tempo básico não é desperdiçado. Ao todo, um mais.

 
Vasiliy Sokolov #:

A produtividade, ao contrário, é geralmente aumentada. A remoção manual leva muito tempo no fluxo principal. + a eliminação é feita elemento por elemento. Compare duas versões do roteiro neste tópico, por exemplo. A diferença de velocidade é várias vezes. A eficiência da memória também aumenta. Porque o coletor de lixo move objetos compactados uns com os outros. Se você administrá-lo manualmente, ele cria furos de memória livres que não são tão fáceis de reutilizar. Além disso, o coletor de lixo trabalha em um fio diferente. O tempo básico não é desperdiçado. Em resumo, é apenas uma vantagem.

Vasily, desculpe-me, mas você não entende nada do que está tentando falar. De forma alguma e de forma alguma.

Ao menos leia a Wikipedia o que é um coletor de lixo. Sua principal peculiaridade é que ela remove objetos, com os quais se perdeu a comunicação.

Somente neste caso, seria chamado de coletor de lixo. Esses dois roteiros são de uma história diferente. O dom de Deus não deve ser confundido com um ovo.

E por que um catador de lixo aumentaria repentinamente a produtividade? É mais um acolchoamento entre o código útil e o hardware, e não um acolchoamento fraco.

 
Georgiy Merts #:

Até onde eu me lembro, um dos desenvolvedores admitiu que existe um coletor de lixo. Mas, para o usuário, "meio que se foi".

///

Este deve ser o "coletor de lixo" que dá uma mensagem sobre vazamento de memória no final do trabalho.

Talvez até apague objetos abandonados. Mas mesmo que os remova, há um grande

diferença - ela só os elimina no final do trabalho. E se em um ciclo multi-militar forem criados novos objetos?

novos objetos? O programa será inoperante, não terá memória suficiente.

Um verdadeiro montador apaga objetos perdidos durante a operação do programa, não

somente no final do programa. É por isso que um estilo especial de programação é permitido.

podemos multiplicar os objetos em qualquer condição e em qualquer quantidade.

 
Vasiliy Sokolov #:

A produtividade, ao contrário, é geralmente aumentada. A remoção manual leva muito tempo no fluxo principal. + a eliminação é feita elemento por elemento. Compare duas versões do roteiro neste tópico, por exemplo. A diferença de velocidade é várias vezes. A eficiência da memória também aumenta. Porque o coletor de lixo move objetos compactados uns com os outros. Se você administrá-lo manualmente, ele cria furos de memória livres que não são tão fáceis de reutilizar. Além disso, o coletor de lixo trabalha em um fio diferente. O tempo básico não é desperdiçado. Ao todo, um mais.

Hmm... E em um coletor de lixo, a eliminação é não-elementar? Sem mencionar que outro fio, quando não há núcleos livres, é realizado pelo mesmo núcleo, e retarda o fio principal.

Em minha opinião, em geral, com cuidadosa consideração, a remoção do lixo pelo usuário é sempre mais eficiente do que a remoção pelo catador de lixo. Entretanto, se você não se importa, o coletor de lixo certamente ganha.

É por isso que não gosto do coletor de lixo, porque ele incentiva este tratamento mais indiferente dos recursos.

 
Dmitry Fedoseev #:

Este deve ser o "assembler" que dá a mensagem sobre vazamentos de memória quando o trabalho é terminado.

Provavelmente até apaga objetos sobrando. Mas mesmo que os apague, há um grande

diferença - ela só os elimina no final do trabalho. E se em um ciclo multi-militar forem criados novos objetos?

novos objetos? O programa será inoperante, não terá memória suficiente.

Um verdadeiro montador apaga objetos perdidos durante a operação do programa, não

somente no final do programa. É por isso que um estilo especial de programação é permitido.

podemos multiplicar os objetos em qualquer condição e em qualquer quantidade.

É isso mesmo. É por isso que não gosto de trabalhar com assembler - o usuário não presta atenção, quantos objetos ele criou e onde.

Basicamente, ele até simplifica o desenvolvimento de alguma forma - não é preciso lembrar de apagar o ocupado. O construtor encontra o momento em que o objeto não é mais referenciado, e o remove. Mas esta posição me repugna. É por causa desta posição que temos programas que rodam cada vez mais devagar, que precisam de mais e mais poderosos recursos de hardware para tarefas de complexidade semelhante.

 
Dmitry Fedoseev #:

Vasily, sinto muito, mas você não entende nada sobre o que está tentando argumentar. Nada e de forma alguma.

Dmitry, desculpe-me, você conhece alguma outra linguagem de programação além do mukl? Não, você não tem. E você ainda não aprendeu a trabalhar com objetos e indicações, está claro a partir daqueles poucos códigos e até mesmo artigos que você publicou. É por isso que não posso sequer responder seriamente a este comentário sem talento e francamente estúpido. Leia finalmente a wikipedia, aprenda o que é um coletor de lixo e como ele é organizado, finalmente leia pelo menos uma vez o que você está tentando consultar. Até agora, tudo parece um cão latindo em uma caravana: sem sentido e sem piedade.
 
Georgiy Merts #:

Hmmm... E no coletor de lixo está a eliminação não-elementar? Sem mencionar o fato de que outro fio, quando não há núcleos livres - é feito pelo mesmo núcleo, e abranda o fio principal.

Em minha opinião, no caso geral, com cuidadosa consideração, a remoção de lixo pelo usuário é sempre mais eficiente do que a remoção pelo catador de lixo. Entretanto, se você não se importa, o coletor de lixo certamente ganha.

É por isso que eu não gosto do coletor de lixo, ele encoraja este mesmo tratamento indiferente dos recursos.

Em vez de fazer suposições sobre como funciona um coletor de lixo, basta comparar a velocidade da remoção automática de objetos com a remoção manual. Todas as fantasias desaparecerão de uma só vez.

 
Vasiliy Sokolov #:

comparar as velocidades de remoção automática de objetos e remoção manual de objetos.

A resposta é de preferência imediata. Nem sempre há tempo para experiências.