Question

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}

quelle sera la valeur de pa, pb après l'exécution de la fonction

EDIT comment passer en tant que pointeur est le retour si pa, pb est NULL

Était-ce utile?

La solution

Comme indiqué dans d'autres réponses, les deux seront toujours NULL après l'appel. Cependant, il existe deux solutions possibles à ce problème:

1) références

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) pointeurs

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.

La plupart des programmeurs choisiraient probablement des références car ils n'auraient alors plus besoin d'affirmer quoi que ce soit (les références ne peuvent jamais être NULL).

Autres conseils

Ils seront NULL, puisque vous les transmettez par valeur. Si vous souhaitez le transmettre par référence, procédez comme suit:

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA*& pa, ClassB*& pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

Remarque: je ne suis pas sûr de ce que vous essayez d'accomplir avec les variables globales. Ils ne sont jamais utilisés dans cet exemple car les variables locales (paramètres de fonction) les cachent.

Je pense que vous devez également déclarer un type de valeur de retour pour votre fonction afin qu'elle soit valide en C ++.

ClassA* pa = NULL;
ClassA* pb = NULL;

void assignObject(ClassA* &pa,ClassB* &pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

Alternativement:

ClassA* pa = NULL;
ClassA* pb = NULL;

void assignObject(ClassA** pa,ClassB** pb)
{
    *pa = new ClassA;
    *pb = new ClassB;
}

NULL, car vous passez les pointeurs par valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top