De retour de pointeur de classe à partir d'une fonction
Je ne sais pas quel est le problème avec ce (gardez à l'esprit que je suis un peu sorta nouvelle C++)
J'ai cette classe:
Foo
{
string name;
public:
SetName(string);
}
string Foo::SetName(string name)
{
this->name = name;
return this->name;
};
//////////////////////////////////////////////
//This is where I am trying to return a Foo pointer from this global function:
Foo * ReturnFooPointer()
{
Foo foo;
Foo * foo_ptr;
foo_ptr = &foo;
return foo_ptr;
}
Au moment de la compilation, il compile très bien. Cependant au moment de l'exécution, il lève une exception d'exécution(une sorte de violation d'accès)
Ce que je fais mal?
Ce code ne peut pas compiler. Il manque le mot-clé class sur le Foo.
OriginalL'auteur theKing | 2009-04-21
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le mot clé new, au lieu de créer de nouveaux Foo sur le tas.
L'objet sur la pile sera libérée que lorsque la fonction se termine, si vous êtes en retournant un pointeur à une défaillance de la place en mémoire.
Voici le code est correct.
Rappeler plus tard pour supprimer le pointeur vous sont de retour.
Plus tard dans le code:
OriginalL'auteur Brian R. Bondy
Vous êtes de retour d'un pointeur à un objet sur la pile. Il est hors de portée du moment où votre fonction retourne une valeur, et n'est pas valide.
Vous devez créer une nouvelle instance de retour, c'est à dire,
Cela va créer un objet dans le tas et de volonté de vivre jusqu'à ce que vous appelez
delete
.OriginalL'auteur Michael
l'objet réel est alloué sur la pile de façon à ce qu'elle soit détruite quand elle est hors de portée (lorsque la fonction retourne). Si vous allouer sur le tas (avec
new
), il sera en vie jusqu'à ce que vousdelete
ilOriginalL'auteur clawr