Inicialização de objetos (composição)

1. Inicialização de objetos (composição)

Alexandre
alexandre_a

(usa Suse)

Enviado em 05/02/2008 - 21:19h

Olá!
Tenho uma classe em C++ 'A' que possui um objeto de uma classe 'B' como membro. Porém, desejo que esse objeto da classe 'B' seja instanciado apenas quando o usuário invoca um determinado método da classe 'A', ou seja, quando o objeto da classe 'A' é criado na função main, o objeto membro 'B' de 'A' não deve ser inicializado.

Eu resolvi isso criando um ponteiro para a classe 'B' e, no método de 'A' que o usuário invoca, eu faço:

b = new B(...);

Então minha pergunta é a seguinte: eu obrigatoriamente tenho que inicializar todos os objetos membro que compõe uma classe no construtor dessa classe? Não posso instanciá-los "mais tarde"?

Obrigado!

Alexandre.


  


2. Re: Inicialização de objetos (composição)

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 17/02/2008 - 04:58h

Você não é obrigado a instaciar os objetos no construtor. Você pode instanciá-los a hora que quiser, como você fez. Dependendo da classe B você não precisa criar um ponteiro para poder instanciá-la e dependendo, precisa. Ou seja, tem tipos que precisam ser instanciados e outros que já o são na declaração da variável. O que precisa ser instanciado pode ser instanciado a qualquer momento. Neste caso o problema não é instanciar e sim destri-lo.

Você pode dificultar o código sem ter o retorno desejado ou até cometer erro.

Por exemplo, se você instanciar algo no construtor é só destrui-lo no destrutor estará correto praticamente sem possibilidade de cometer erro. Porém se você instancia em outro momento, no destrutor terá que saber se ele está instanciado ou não o que torna o código mais perigoso. E quando chamar o método instanciará B ou B já está instanciado? É a primeira vez ou não? Novamente estaremos deixando o código perigoso.
Se o metodo que instancia B for chamado logo no início teremos acrescentado códigos perigosos sem melhorar nada, a não ser que instancie e destrua a todo o momento, diminuindo o desempenho com um: instancia, destroi, instancia, destroi ..., além, é claro de deixar o código mais perigoso ainda.
Resumindo, instanciar um objeto não precisa ser no construtor, mas tem que se pensar bastante pois pode ser uma escolha que irá piorar o desenpenho além de deixar o código mais perigoso (sujeito a erro).

Espero ter respondido sua pergunta. Caso contrário poste aqui a dúvida novamente.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts