wo findet der ausführung des destruktors statt? am ende der funktion functionTwo oder am ende Main ?
meine meinung nach an der stelle wo der funktion functionTwo zu ende ist aber bin ich nicht sicher, wenn das der fall ist dann sollte das resultat so aussiehen :
Eine Katze erzeugen... Simple Cat Konstruktor... Frisky ist 1 Jahre alt. Frisky ist 5 Jahre alt. FunctionTwo aufrufen... Function Two. Rueckkehr... Frisky ist jetzt 5 Jahre alt. Simple Cat Destruktor... Frisky ist 5 Jahre alt.
aber die ausführung des codes ergibt anderes :
Eine Katze erzeugen... Simple Cat Konstruktor... Frisky ist 1 Jahre alt. Frisky ist 5 Jahre alt. FunctionTwo aufrufen... Function Two. Rueckkehr... Frisky ist jetzt 5 Jahre alt. Frisky ist 5 Jahre alt. Simple Cat Destruktor...
wieso erscheint "Simple Cat Destruktor.." ganz am ende ????????? für eine erklärung bin ich dankbar.
hier ist der code:
C++:
// Listing 12.2
// Zeiger auf Objekte übergeben
#include <iostream>
class SimpleCat
{
public:
SimpleCat();
SimpleCat(SimpleCat&);
~SimpleCat();
int GetAge() const { return itsAge; }
void SetAge(int age) { itsAge = age; }
private:
int itsAge;
};
SimpleCat::SimpleCat()
{
std::cout << "Simple Cat Konstruktor...\n";
itsAge = 1;
}
SimpleCat::SimpleCat(SimpleCat&)
{
std::cout << "Simple Cat Kopierkonstruktor...\n";
}
SimpleCat::~SimpleCat()
{
std::cout << "Simple Cat Destruktor...\n";
}
const SimpleCat * const
FunctionTwo (const SimpleCat * const theCat);
int main()
{
std::cout << "Eine Katze erzeugen...\n";
SimpleCat Frisky;
std::cout << "Frisky ist ";
std::cout << Frisky.GetAge() << " Jahre alt.\n";
int age = 5;
Frisky.SetAge(age);
std::cout << "Frisky ist ";
std::cout << Frisky.GetAge() << " Jahre alt.\n";
std::cout << "FunctionTwo aufrufen...\n";
FunctionTwo(&Frisky);
std::cout << "Frisky ist ";
std::cout << Frisky.GetAge() << " Jahre alt.\n";
return0;
}
// functionTwo übernimmt einen konstanten Zeiger
const SimpleCat * const
FunctionTwo (const SimpleCat * const theCat)
{
std::cout << "Function Two. Rueckkehr...\n";
std::cout << "Frisky ist jetzt " << theCat->GetAge();
std::cout << " Jahre alt.\n";
// theCat->SetAge(8); const!
return theCat;
}
Dieser Post wurde am 14.11.2005 um 18:05 Uhr von FloSoft editiert.
Für Frisky wird der Destruktor am Ende von main ausgeführt weil die Ausführung dort den Bereich verlässt in dem Frisky sichtbar ist. Das Verhalten dass du von FunctionTwo erwartest würde sich ergeben wenn du die Katze byValue übergeben würdest.Dann würde aber auch nicht Frisky am Ende der Funktion zerstört sondern die Kopie die davon gemacht wurde.
MfG Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.