L505 wrote:
>>In short (don't pin me on the names or on exact details in special cases):
>>
>>Assume you have a ansistring and you assign something to it
>>
>>   S := 'SomeString';
>>
>>the compiler generates something like
>>
>>   DecStringRef(S);
>>   S -> 'SomeString';
>>   IncStringRef(S);
>>
>>The DecStringRef() decrements the refcount and checks if the it reaches
>>zero. Ifso, the string is freed. The referencecounter of a strings lies
> 
> 
> 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?

It is first incremented and then decremented. Reason: multi threading safeness.

> Does the reference count start at 0, or 1?

1

> 
> 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
> 
> That seems like it isn't doing anything useful, since we are incrementing and
> decrementing by one, every time we assign a string.

One string is incremented, the other decremented. Your conclusion applies only 
to
s:=s;

> 
> What Jonas said was that the reference count would be 1 (one) when you pass 
> it to a
> DLL. You are saying it will be 0 (zero). We have two people saying opposite 
> things
> here, so I'm really not sure what is going on. What would be logical to me, 
> is if the
> reference count was 1, not zero.
> 
> I guess when I finally understand this science, I will write a diagram 
> showing how it
> works in a Pascal procedure or function with comments beside each code 
> snippet saying
> what the reference count is.
> 
> If there is a PDF file that explains this or some good website let me know. I 
> hate to
> embarrass myself here (maybe other people are confused too, though).

Read the sources :)
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to