MQL5 O compilador não faz distinção entre uma classe e um ponteiro para ela - página 4
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
que eles são equivalentes
que eles são equivalentes.
Esqueça totalmente essa atribuição.
Esqueça completamente esta tarefa.
Portanto, não sou eu quem deve esquecer, é o compilador que não deve permitir que você o escreva dessa maneira.
E no momento não apenas compila, mas corre sem erros!
Portanto, não sou eu quem precisa esquecer, é o compilador que não deve permitir que seja escrito dessa forma.
E no momento não apenas compila, mas corre sem erros!
O compilador permite isso porque você pode, se souber o que está fazendo.
class A { public: int iValue; A(){Print("++");} ~A(){Print("--");} }; //...................... A m_A[2]; void OnStart() { A a; m_A[0] =a; m_A[1] = new A(); }
Corra e veja quantas vezes e quando o construtor e o destruidor são chamados.
m_A[0]=a; neste caso é igual a: m_A[0].iValue=a.iValue;
novo A(), neste caso, cria um novo objeto, vamos chamá-lo de temporário e acontece o seguinte: m_A[1].iValue=temp.iValue;
Corra e veja quantas vezes e quando o construtor e o destruidor são chamados.
m_A[0]=a; neste caso é igual a: m_A[0].iValue=a.iValue;
A segunda linha deste exemplo é incorreta
Não se pode salvar um ponteiro em um objeto. O compilador simplesmente não percebe isso.
A segunda linha deste exemplo não é correta
Não se pode salvar um ponteiro em um objeto. E o compilador não percebe isso.
Corra e veja quantas vezes e quando o construtor e o destruidor são chamados.
m_A[0]=a; neste caso é igual a: m_A[0].iValue=a.iValue;
novo A(), neste caso, cria um novo objeto, vamos chamá-lo de temporário e acontece o seguinte: m_A[1].iValue=temp.iValue;
Provavelmente o construtor 3, o destruidor 2. O resto está correto.
e acontece o seguinte: m_A[1].iValue=temp.iValue;
Esta é a 4ª interpretação!))
Então por que é necessário chamar a exclusão na saída? Para um objeto temporário?
Esta é a 4ª interpretação!))
Então por que a saída precisa ser excluída? Para um objeto temporário?