ich eine KlasseZurückgeben eines Klasse-Objekt mit einem Zeiger
habenclass Foo
{
public:
char* ptr;
Foo() { ptr=new char [10]; }
~Foo() { delete [] ptr; }
};
Ich habe gelernt, dass ein Objekt dieser Klasse Rückkehr ist nicht möglich, da der dynamisch zugewiesenen Zeiger delete
‚ed ist und erzeugt einen baumelnden Zeiger in der Aufruf der Funktion
Also wie kann ich ein Objekt dieser Klasse?
Foo Bar()
{
Foo obj;
return obj;
}
Kann es durch Hinzufügen eines Copykonstruktor
Foo::Foo(const Foo& obj)
{
ptr = new char [10];
for(int i = 0 ; i < 10 ;++i)
ptr [i] = obj.ptr[i];
}
und die Funktion als
Foo Bar()
{
Foo obj;
return Foo(obj); //invokes copy constructor
}
Hinweis Dies sind nur gelöst werden Darstellung der tatsächlichen Klasse ich will und ist nicht erstellt nach den empfohlenen Standards (dh. Bitte sagen Sie mir nicht zu verwenden std::string
oder std::vector
).
@PaulMcKenzie Es erklärt nicht, was man tut, um es zu überwinden. – WARhead
Der Link zeigt Ihnen, dass Sie einen Kopierkonstruktor, einen Zuweisungsoperator und einen Destruktor benötigen. – PaulMcKenzie
@WARhead, haben Sie den Abschnitt ** Verwalten von Ressourcen ** in der ersten Antwort angeschaut? –