|
|
Home » U++ Library support » U++ Core » Heap-leaks and polymorphic containers
Heap-leaks and polymorphic containers [message #15857] |
Mon, 12 May 2008 17:41 |
mrjt
Messages: 705 Registered: March 2007 Location: London
|
Contributor |
|
|
It is my understanding that the following code should execute without any memory leaks:
struct Item {
String name;
};
struct Collection : public Item
{
Array<Item> items;
};
GUI_APP_MAIN
{
// Example 1
Array<Item> array;
array.Create<Collection>().items.Add();
// Example 2
Collection *col = new Collection();
col->items.Add();
Item *item = (Item *)col;
delete item;
}
But for some reason the destructor for 'items' isn't getting called. Adding a virtual destructor to force clearance just causes a crash in MemoryFreeDebug.
Is something broken or am I just missing something obvious?
[Updated on: Mon, 12 May 2008 17:49] Report message to a moderator
|
|
|
|
Re: Heap-leaks and polymorphic containers [message #15864 is a reply to message #15858] |
Tue, 13 May 2008 15:46 |
mrjt
Messages: 705 Registered: March 2007 Location: London
|
Contributor |
|
|
luzr wrote on Mon, 12 May 2008 18:05 | Well, virtual destructor is absolutely required here.
| Hmm. I understand why this works (the implicit destructor isn't virtual):
struct Item : public Moveable<Item> {
String name;
virtual ~Item() { }
};
struct Collection : public Item
{
Array<Item> items;
};
GUI_APP_MAIN
{
Collection *col = new Collection();
col->items.Add();
Item *item = (Item *)col;
delete item;
}
But what baffles me is why this works with Vector, but not Array (the Array's destructor doesn't get called but the Vector one does).
struct Item : public Moveable<Item> {
String name;
};
struct Collection : public Item
{
Vector<Item> items; // Heap leak if changed to Array
};
GUI_APP_MAIN
{
Collection *col = new Collection();
col->items.Add();
Item *item = (Item *)col;
delete item;
}
[Updated on: Tue, 13 May 2008 15:59] Report message to a moderator
|
|
|
|
|
|
|
Goto Forum:
Current Time: Tue Apr 23 10:59:56 CEST 2024
Total time taken to generate the page: 0.02290 seconds
|
|
|