On Tuesday, 4 February 2014 at 20:16:20 UTC, Steven Schveighoffer wrote:
On Tue, 04 Feb 2014 15:10:48 -0500, deadalnix <deadal...@gmail.com> wrote:

On Tuesday, 4 February 2014 at 19:28:08 UTC, Steven Schveighoffer wrote:
Where you have to be cognizant is avoiding cycles. Plain and simple. And it's not that difficult. The compiler takes care of the rest. It's somewhat magical I suppose :) Managing your autorelease pools can make a difference, but is not necessarily critical.


My experience is that, just like null reference, it is highly dependent on the type of code you are facing.

Typically, you'll have trouble with complex graph of objects.

This is very true. I have only dealt with acyclic (except for parent pointers) graphs or linked-lists.

For specialized cases, you will have to NULL out the pointers to/from a node that has to be deleted (essentially a manual delete).

But it works VERY well for linked-lists/queues. My app is I/O intensive, so I have a lot of that.

-Steve

Yes.

Also, another issue comes up when you share data across threads.

Core can share a cache line in read mode, but can't in write mode. That mean that updating the reference count will cause contention on the cache line (core will have to fight for the cache line ownership). That is why immutability + GC is so efficient in a highly concurrent system, and ref counting would ruin that.

Reply via email to