On 15 dec 2005, at 05:45, L505 wrote:

Why does it generate a DecStringRef before you assigned the string? What if it is the first time and you are already at 0, it can't decrement it to -1 can it?

The reference count can never be zero, because when it becomes zero the string is freed and replaced with a nil pointer. Calling DecStringRef() on a nil pointer does nothing.

Does the reference count start at 0, or 1?

All ansistring variables are initialised with nil.

That seems like it isn't doing anything useful, since we are incrementing and
decrementing by one, every time we assign a string.

An ansistring is a pointer which points to a string. Many different ansistring variables can point to the same string, and then the reference count of this ansistring will be equal to the amount of ansistring variables pointing to it.

s := t; (-> reference count of ansistring to which s points is decreased by 1 and freed if reference count became zero, the one to which t points is increased by 1) q := t; (-> reference count of ansistring to which q points is decreased by 1 and freed if reference count became zero, the one to which t points is again increased by 1)


Jonas

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to