Baalzamon
2005-11-05, 12:46:35
Hallo,
als Java-Programmierer bin ich es gewohnt einen Garbage-Collector zu haben, welcher hinter mir aufräumt. Da dies in C++ nicht so ist, habe ich bei zwei Sachen ein Verständisproblem was die Speicherzuweisung betrifft, vielleicht kann mir ja jemand helfen.
Fall 1:
In einer Methode wird als Rückgabewert ein neues Objekt erstellt.
Object* getObject()
{
return (new Object());
}
// snip
// Wenn ich sowas mache ist klar, das ich den Speicher mit delete freigeben kann.
Object* obj = getObject();
delete obj;
// Was passiert mit dem Speicher bei sowas?
getObject();
Wenn ich den Rückgabewert von getObject() nicht benutze (d.h. nicht sowas wie obj = getObject();) was passiert mit dem allokierten Speicher?
Fall 2: Decorator Pattern
Der ein oder andere kennt das Pattern vielleicht, ansonsten kann man es bestimmt auch irgendwo nachlesen. Ganz kurz: Decorator und Object implementieren dasselbe Interface und der Decorator bekommt immer ein Object mit in den Konstruktor übergeben. Mein Problem dabei ist, das ich nicht genau weiss was passiert wenn man z.b. sowas macht:
Object* obj = new Decorator(new OtherDecorator(new Object()));
delete obj;
Lösche ich mit delete den kompletten allokierten Speicher? Wie verhalten sich die geschachtelten new?
als Java-Programmierer bin ich es gewohnt einen Garbage-Collector zu haben, welcher hinter mir aufräumt. Da dies in C++ nicht so ist, habe ich bei zwei Sachen ein Verständisproblem was die Speicherzuweisung betrifft, vielleicht kann mir ja jemand helfen.
Fall 1:
In einer Methode wird als Rückgabewert ein neues Objekt erstellt.
Object* getObject()
{
return (new Object());
}
// snip
// Wenn ich sowas mache ist klar, das ich den Speicher mit delete freigeben kann.
Object* obj = getObject();
delete obj;
// Was passiert mit dem Speicher bei sowas?
getObject();
Wenn ich den Rückgabewert von getObject() nicht benutze (d.h. nicht sowas wie obj = getObject();) was passiert mit dem allokierten Speicher?
Fall 2: Decorator Pattern
Der ein oder andere kennt das Pattern vielleicht, ansonsten kann man es bestimmt auch irgendwo nachlesen. Ganz kurz: Decorator und Object implementieren dasselbe Interface und der Decorator bekommt immer ein Object mit in den Konstruktor übergeben. Mein Problem dabei ist, das ich nicht genau weiss was passiert wenn man z.b. sowas macht:
Object* obj = new Decorator(new OtherDecorator(new Object()));
delete obj;
Lösche ich mit delete den kompletten allokierten Speicher? Wie verhalten sich die geschachtelten new?