On Tuesday, 10 April 2012 at 09:52:45 UTC, simendsjo wrote:
On Tue, 10 Apr 2012 11:27:19 +0200, CrudOMatic <crudoma...@gmail.com> wrote:
hmmmm... so no need for a generic object reference counter. Nice. I was trying to approach it from a literal sense (e.g. card moves from deck to player's hand) - when you do the popBack() is that object returned and deleted from the original array, or just the reference returned and ref removed from original array?

The reference is returned, and it's still in the array - kind of... Say:
cards is [Card1, Card2]
cards.popBack();
cards is now [Card1], but Card2's reference is still there in position 2. The length of the array in decremented. If you try to append a card to cards, the runtime will see you're trying to write over the reference for Card2, so it will create a new array to avoid this. If you use assumeSafeAppend, you say that you don't mind overwriting this reference. Remember that as long as you hold a reference to Card2 somewhere, the GC won't delete the instance even if the reference no longer exists in the cards array.

I was trying to use literal real-world ideas of objects, and was wanting the moving so I didn't have weird issues later down the road, like not knowing why a reference was hanging around. I understand D has a GC, but sometimes it pays to do management yourself.

A card game doesn't sound like heavy use of the GC, so I don't think that should be a problem.

Awesome. One last question, does popFront() have the same effect of decreasing length - or should I avoid popFront()?

Reply via email to