Use of Boost library classes in kdecore?
David Jarvie
lists at astrojar.org.uk
Fri Jul 6 23:01:53 BST 2007
On Friday 06 July 2007 22:42:39 koos vriezen wrote:
> 2007/7/6, David Jarvie <lists at astrojar.org.uk>:
> [..]
>
> > The reason reference counted pointers are necessary is to prevent users
> > of KTimeZone instances from referencing invalid pointers if the KTimeZone
> > instance happens to get deleted somewhere else. This problem has already
> > arisen when iCalendar files are reloaded in kdepimlibs/kcal - KDateTime
> > objects which reference a time zone require that the KTimeZone instance
> > doesn't disappear. It is unrealistic to expect developers in general to
> > be sufficiently aware of the issue to manage to avoid it. The problem
> > might only manifest itself occasionally, and it is not necessarily easy
> > to track down. Use everywhere of a KTimeZonePtr class in place of
> > KTimeZone pointers would fix this:
>
> You have then two different pointers to the same timezone?
Yes, there will frequently be many pointers (many thousands in some cases) to
the same time zone. Each KDateTime instance which uses the time zone will
have its own pointer.
> How about adding a comment:
> // Note the KTimeZone pointerr becomes invalid when you call reload
For KDateTime values, it's simply not practical. They are scattered about all
over the place in kdepim, and there would be no way of being sure that all
those which refer to a particular time zone have been deleted. Ensuring that
the KTimeZone instances are never deleted until all references have
disappeared is the only safe and practical approach.
> Btw. how many timeszones are there anyhow?
In an iCalendar file, I would guess that there would typically be only a small
number. There could be other applications in the future which create a much
larger number of instances (e.g. of KTzfileTimeZone, if historical
information was required for system time zones).
> > typedef shared_ptr<KTimeZone> KTimeZonePtr;
>
> Note that this may add other headaches like a pointer ending in two
> shared pointers
I don't understand.
> and the KTimeZone unaware of its own shared_ptr.
The KTimeZone doesn't have a shared_ptr - it just contains the reference
counter.
--
David Jarvie.
KAlarm author and maintainer.
http://www.astrojar.org.uk/kalarm
More information about the kde-core-devel
mailing list