This is a discussion on Re: Problem with QT - KDE ; On Saturday 22 October 2005 11:00, Bernd Brandstetter wrote: > On Saturday 22 October 2005 10:40, Andr=E9 W=F6bbeking wrote: > > > > ??? > > > > If an object (in the case the the list) was destructed you ...
On Saturday 22 October 2005 11:00, Bernd Brandstetter wrote:
> On Saturday 22 October 2005 10:40, Andr=E9 W=F6bbeking wrote:
> > ???
> > If an object (in the case the the list) was destructed you MUST NOT
> > use it anymore.
> No, I meant something different:
> Say you have derived a _pointer-based_ list from QList
> class MyList : public QList
> and since you always want all list items to be deleted along with the
> list, you put qDeleteAll(this) in the destructor of the class to
> simulate the behavior of Qt3's setAutoDelete()
> Now, if you happen to iterate over such a list using foreach() like
> MyList list;
> // fill list with items
> foreach(SomeClass* item, list)
> // do something with the item
> then at this point after the foreach loop has finished, the contents
> of the original list, i.e. the objects pointed to by the list items,
> have been deleted.
> That's because foreach() creates a temporary copy of the list and
> iterates over that one. After the iteration, the temporary list is
> deleted, thereby calling the destructor defined above and thus,
> deleting all items!
I see. This sounds a bit strange and I don't know if it's really good to =
create a temporary copy.
> This occured to me when I ported an application from Qt3 to Qt4 and
> it took me quite some time to find out why it kept crashing. Now my
> rule of thumb is: _Never_ call qDeleteAll(this) in the destructor of
> _pointer-based_ collections!
On the other side: if the list really takes over ownership you should =
implement the copy constructor and assignment operator or forbid both =
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscrib=