Rückkehr Klasse pointer von einer Funktion
Ich bin nicht sicher was ist falsch mit diesem (halten Sie im Verstand ich bin irgendwie sorta neu in C++)
Habe ich diese Klasse:
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;
}
Zur compile-Zeit, diese kompiliert einwandfrei. Aber im Lauf der Zeit wirft er eine exception zur Laufzeit(eine Art access violation)
Was mache ich falsch?
- , Der code kann möglicherweise nicht kompilieren. Ihnen fehlt das Schlüsselwort class Foo.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie das Schlüsselwort new, verwenden Sie stattdessen erstellen Sie neue Foo auf dem heap.
Das Objekt auf dem stack wird freigegeben, wenn die Funktion endet, also sind Sie wieder, die einen Zeiger auf einen ungültigen Ort im Speicher.
Hier ist der richtige code.
Erinnern Sie sich später, um das löschen der Zeiger zurückgegeben werden soll.
Später im code:
Du bist der Rückgabe einen Zeiger auf ein lokales Objekt auf dem stack. Es geht aus dem Umfang der moment, in dem Ihre Funktion zurück, ist ungültig.
Erstellen Sie eine neue Instanz zurückgeben, d.h.,
Dieser erstellt ein Objekt im heap und werden Leben, bis Sie rufen
delete
drauf.das eigentliche Objekt zugewiesen ist, auf den Stapel, damit es zerstört wird, wenn es den Bereich verlässt (wenn die Funktion zurückgibt). Wenn Sie sich um Speicher auf dem heap (mit
new
), es wird lebendig sein, bis Siedelete
es