Re: delete pointers in destructor
TBass wrote:
Sorry. I didn't mean to be vague.
[snip]
The exceptions to that rule is if your list is of pointers to
dynamically created objects.
[/snip]
I am using std::list, but it is a list of pointers to an instance of
the class, which I created with the new statement.
Do you really need to? What if you keep a list of tags or list of
devices instead? 'std::list' creates its elements dynamically
anyway. Let your lists manage memory.
If you _have to_ keep a list of pointers, you're doing it correctly,
with a bit of excess, see below.
Here's a quick outline of what I'm doing:
class tag
{
...
}
class device
{
...
std::list<tag *> m_listTags
Why not change it to
std::list<tag> m_listTags;
?
}
device::AddTag
{
tag *mytag = new tag;
m_listTags.push_back( mytag );
In case you decide to change, you would just do
m_listTags.push_back(tag());
Isn't it better?
}
class project
{
...
std::list<device *> m_listDevices
Same here, why not just
std::list<device> m_listDevices;
? I know one possible answer, but I don't want to speculate.
}
project::AddDevice
{
device *mydevice = new device;
m_listDevices.push_back( device );
}
So I'm thinking I should just add to the destructors:
Below my comments assume you still go with the lists of pointers.
device::~device(void)
{
std::list<tag *>::iterator item;
device *mytag;
^^^^^^^^^^^^^
You don't need this.
for ( item = m_listTags.begin(); item != m_listTags.end(); +
+item )
{
mytag = *item;
^^^^^^^^^^^^^^
You don't need this either.
delete mytag
Change it to
delete *item;
}
m_listTags.empty()
No need to empty, it's about to be destructed.
}
project::~project(void)
{
std::list<device *>::iterator item;
device *mydevice;
Same thing. No need for this local var.
for ( item = m_listDevices.begin(); item != m_listDevices.end(); +
+item )
{
mydevice = *item;
delete mydevice
Just do
delete *item;
instead.
}
m_listDevices.empty()
No need to empty, it's about to be destructed.
}
Thanks!
T
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask