Designação dentro de função que é passada como ponteiro?
-
03-07-2019 - |
Pergunta
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}
qual será o valor do pa, pb depois de executar a função
EDIT como passar como ponteiro é o retorno se pa, pb é NULL
Solução
Como salientado em outras respostas - ambos ainda será NULL após a chamada. No entanto, há duas soluções possíveis para este problema:
1) referências
void assignObject(ClassA*& pa, ClassB*& pb)
{
pa = new ClassA;
pb = new ClassB;
}
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(pa, pb); // both will be assigned as expected.
2) ponteiros
void assignObject(ClassA** pa, ClassB** pb)
{
assert(pa != NULL); assert(pb != NULL);
*pa = new ClassA;
*pb = new ClassB;
}
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(&pa, &pb); // both will be assigned as expected.
A maioria dos programadores provavelmente escolheria referências porque então eles não precisam de afirmar qualquer coisa (referências nunca pode ser NULL).
Outras dicas
Eles serão NULL, desde que você está passando-os por valor. Se você quiser passá-lo por referência, você faria isso:
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA*& pa, ClassB*& pb)
{
pa = new ClassA;
pb = new ClassB;
}
Note, eu não estou certo de que você está tentando realizar com as variáveis ??globais. Elas nunca foram usadas neste exemplo, uma vez que as variáveis ??locais (parâmetros de função) ocultá-los.
Eu acho que você também precisa declarar um tipo de valor de retorno para a função para que ele seja válido C ++.
ClassA* pa = NULL;
ClassA* pb = NULL;
void assignObject(ClassA* &pa,ClassB* &pb)
{
pa = new ClassA;
pb = new ClassB;
}
Como alternativa:
ClassA* pa = NULL;
ClassA* pb = NULL;
void assignObject(ClassA** pa,ClassB** pb)
{
*pa = new ClassA;
*pb = new ClassB;
}
NULL, porque você está passando os ponteiros em termos de valor.