Curso completo de linguagem C++
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
track10.html

index << >>

10. Destrutor

10.1 Destrutores Enquanto o construtor é um método que deve realizar a inicialização das propriedades e realizar a alocação de recursos do sistema, o destrutor tem a função contrária de fazer a desalocação desses recursos e liberar a memória que foi alocada previamente. O construtor deve ter o mesmo nome da classe precedida pelo til ( ~ ), não deve ter argumentos nem valor de retorno, ex.: ~Monstro(); No programa abaixo, nosso programa cria um classe Monstro e na execução do construtor é criado uma array para guardar o caminho que nosso monstrinho vai fazer no jogo. No final do programa o destrutor deleta o ponteiro e libera a memória ao sistema.
// destrutor.cpp // ilustra o uso de destrutores #include <iostream> #include <cstdlib> using namespace std; // protótipo de nossas funções básicas void inicio(); void fim(); struct PONTO { int x; int y; }; // end struct // Vamos criar uma classe Monstro para criar objetos monstro class Monstro { public: PONTO *caminho; Monstro () { caminho = new PONTO[3]; } // fim do construtor() ~Monstro () { cout << "\t destrutor() foi chamado.\n"; delete[] caminho; fim(); } // fim do destrutor() void mostrar_caminho() { for (int ncx=0; ncx < 3; ncx++) { cout << "\t (" << caminho[ncx].x; cout << "," << caminho[ncx].y << ") \n"; } // endfor } // fim do método: mostrar_caminho() void config_caminho (int nponto, int x, int y) { caminho[nponto]. x = x; caminho[nponto]. y = x; } // fim do método: config_caminho() }; // endclass int main() { inicio(); int x, y; // Criando um objeto da classe monstro Monstro godzila; for (int nponto = 0; nponto < 3; nponto++) { x = rand() % 800; y = rand() % 600; godzila.config_caminho (nponto, x, y); } // endfor cout << " O caminho do godzila: \n"; godzila.mostrar_caminho(); fim(); } // endmain //************* funções ****************************************************** void inicio() { system("color f0"); system("title destrutor.cpp"); cout << "\n"; } // endfunction: initsys() void fim() { cout << "\n"; system("pause"); } // endfunction: endsys()
PONTO *caminho; Monstro () { caminho = new PONTO[3]; } // fim do construtor() No código acima nós criamos um ponteiro do tipo estrutura PONTO. Na sequência, no construtor, alocamos a quantidade de memória para guardar 3 pontos feitos com nossa estrutura. ~Monstro () { cout << "\t destrutor() foi chamado.\n"; delete[] caminho; fim(); } // fim do destrutor() No destrutor liberamos a memória que foi alocada previamente no construtor. Emitimos uma mensagem via cout para você perceber que o destrutor é chamado automaticamente no final do programa. x = rand() % 800; Aqui usamos a função rand() da biblioteca cstdlib para gerar um número aleatório entre 0 e 800 que representa aqui, supostamente, a coordenada x da tela.
index << >>


Produzido por Gameprog: Jair Pereira - Fev/2006 - Junho/2013 © gameprog.br@gmail.com http://www.gameprog.com.br