L505 wrote:
In this case, it decrements 1 and increments 1, so we will always end up with a
very
simple, easy, solvable problem.
1 - 1 = 0
1 - 1 = 0
Nope, since the string was nil, it isn't decremented, so you end up with
a refcount of 1
The string is 1, not nil
1 - 1 = 0 from your diagram indicates 1 is the starting refcount, not nil.
When I responded to your mail, I didn't just mean if the string was nil, or at
1. I
meant your diagram didn't seem to click in with me when any number was filled
in the
blank. i.e. 1, 2, 3, 4, 5 or any number.
From your diagram, I got this:
String refcount: 2
Decrement(string) (1 - 1 = 1)
string -> 'some string'
Increment(string) (1 + 1 = 2)
We are at 2 again. What was the point of doing it at all?
Ah now I understand your problem, but you miss the point that we are not
refcounting the variable S, but its contents.
So S points to 'somevalue' and suppose this string has a refcount of 2.
Calling DecRef(S) will decrement the refcount of the 'somevalue' string.
After we point S to 'some sting', AddRef(S) will set the refcount of
'some string' to 1.
So we have 2 equations:
'somevalue': 2 - 1 = 1
'somestring': 0 + 1 = 1
You see, we are working with 2 different strings, and not the same.
[snip]
The other problem I see with Marc's diagram was that somehow you showed the
string
being decremented before anything even happened.
Ehm.... I didn't draw any diagram, AFAIK you did.
Marc
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel