#include <stdio.h>
#include <conio.h>
int main ()
{
struct TEST
{
int num;
~TEST ()
{
printf ("Você está dentro do destrutor!\n");
getch ();
}
};
TEST exemplo= {0};
exemplo.num= 0;
exemplo= (TEST) {0};
return 0;
}
O código é bem simples.
Primeiro eu crio uma estrutura com o nome TEST que contém:
- Um variável para um número inteiro
- Um destrutor que só imprimi uma mensagem na tela
Depois eu demonstro as três formas possíveis de atribuição pra variável dentro da estrutura:
- Na inicialização
- Na atribuição individual de elementos de estrutura
- Na atribuição em lote (que no caso é com um elemento só)
Os destrutores só são executados quando a estrutura é destruída, ou seja, ou quando termina o bloco a qual ela pertence, ou quando é usada a desalocação dinâmica (usando delete).
Nesse caso, estranhamente o destrutor é executado duas vezes. Se fosse uma vez só seria compreensível, já que a função main termina, a estrutura é destruída e o destrutor é executado.
Daí eu percebi que a seguinte linha executa o destrutor, indevidamente, diga-se de passagem:
exemplo= (TEST) {0};
Se você comentar ela, o destrutor é executado uma vez só, como tem que ser.
Por que essa linha executa o destrutor?
Se for de alguma relevância, eu fiz isso usando o wxDev-C++ 7.3.1.3.
Question
Ricardo Martins
Vamos supor que eu tenha o seguinte código:
O código é bem simples. Primeiro eu crio uma estrutura com o nome TEST que contém: - Um variável para um número inteiro - Um destrutor que só imprimi uma mensagem na tela Depois eu demonstro as três formas possíveis de atribuição pra variável dentro da estrutura: - Na inicialização - Na atribuição individual de elementos de estrutura - Na atribuição em lote (que no caso é com um elemento só) Os destrutores só são executados quando a estrutura é destruída, ou seja, ou quando termina o bloco a qual ela pertence, ou quando é usada a desalocação dinâmica (usando delete). Nesse caso, estranhamente o destrutor é executado duas vezes. Se fosse uma vez só seria compreensível, já que a função main termina, a estrutura é destruída e o destrutor é executado. Daí eu percebi que a seguinte linha executa o destrutor, indevidamente, diga-se de passagem:Se você comentar ela, o destrutor é executado uma vez só, como tem que ser.
Por que essa linha executa o destrutor?
Se for de alguma relevância, eu fiz isso usando o wxDev-C++ 7.3.1.3.
Edited by Ricardo MartinsLink to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.