J'ai deux classes, nous allons les appeler A et BNouveau pointeur dans la méthode de classe doit être casté dans une référence
class A:
{
public:
//Some functions
A *getNewA() const;
private:
//some attributes
}
class B:
{
public:
//Some functions
private:
A &reftoA;
}
Dans le code principal, je doit générer un nouveau A grâce au Méthode A :: getNewA(). Et ce doit aller à B :: reftoA, comme il est écrit dans la classe B.
Voici la méthode A :: getNewA():
A *A::getNewA()
{
A *newA = new A;
return newA;
}
OK. Alors maintenant, j'appelle getNewA et que vous souhaitez stocker les résultats dans reftoA, qui est une référence à A. En fonction B (qui prennent une référence à A comme paramètre)
B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
}
Je pensais que cela aurait dû être travailler, mais ce ne sera pas le cas. Parce que lors du déréférencement, reftoA prendra toujours l'objet this et non le nouvel objet alloué.
Soyons plus clairs et modifions les fonctions de sortie des résultats
A * A::getNewA()
{
A *newA = new A;
std::cout << "New pointer " << newA << std::endl;
std::cout << "this pointer" << this << std::endl;
return A;
}
void B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
std::cout << "new generated pointer " << &reftoA << std::endl;
}
Voici une des sorties:
New pointer : 004FFAEC
this pointer: 0069D888
New generated pointer : 0069D888 //Expected : 004FFAEC
Je ne peux pas obtenir ce « nouveau pointeur généré » pour être le même que le nouveau pointeur, le A :: getNewA() retourne après avoir alloué la mémoire. Bien sûr, je suppose qu'il est utile de déréférencer le pointeur pour le stocker dans une référence. Je sais que les références sont utilisées avec un objet existant. Peut-être que le nouvel objet A :: getNewA() devrait allouer de la mémoire pour ne fonctionnera pas comme prévu.
je pouvais utiliser un pointeur de référence à la place dans B :: foo(), je sais, mais je ne peux pas
Je pense que je comprends mal quelque chose refrence et pointeur, mais je ne savoir quoi.
Toute aide grandement appréciée
Attendez, quoi? 'retour A'? Comment ça se construit? Pouvez-vous s'il vous plaît essayer de créer un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) pour nous montrer? –
En outre, vous avez une fuite de mémoire. Vous supprimez le pointeur retourné par 'getNewA' (bien, en supposant que vous retourniez réellement' newA'), vous n'avez donc rien à 'supprimer '. –
Enfin, et la source probable de votre problème: * Vous ne pouvez pas réaffecter une référence *. Ce que vous faites est d'assigner * à * l'objet *. Vous faites effectivement 'reftoA.operator = (* (paramA.getNewA())) ' –