[Newbies] Re: Proper object removal
Klaus D. Witzel
klaus.witzel at cobss.com
Wed Jun 4 13:41:34 UTC 2008
On Wed, 04 Jun 2008 15:20:05 +0200, Rob Rothwell wrote:
> On Wed, Jun 4, 2008 at 8:41 AM, Klaus D. Witzel wrote:
>
>> {'this ', 'and ', 'that'} collect: [:each | ].
>>>> Smalltalk garbageCollect.
>>>> {thisContext tempAt: 1} inspect
>>>>
>>>> first line: create some object and make a temp var point to it.
>>>> second line: invoke GC.
>>>> third line: see what's still pointed to by the temp var.
>>>>
>>>
>
> So...if I do line 1, then line 3, should I see items in the Array, or
> just the Array itself.
What you want to see (according to your question about object removal) is
just the empty array; and what I wanted to point out (without
hair-splitting ;) is, that when you GC+check this within the same method,
it *must* fail.
In Smalltalk it's very easy to script the removal+GC+check, for example in
a workspace or add GC+check temporarily in a debugger session; that was my
concern.
> This is all very interesting, because in my application I am creating
> lots
> of collections of objects maintaining parent/child pointers, and I have
> obviously just done it WRONG!
A good example for maintaining parent/child objects, which works
perfectly, is Smalltalk's #addSubclass: #removeSubclass: (both on the
instance side of Class); when you check these two methods think that
'superclass' is your parent pointer.
> Chasing pointers and objects is showing me that when I remove objects
> from
> my collections, I need to do that "all the way down," I think...
>
> Thank you for helping my brain move in the right direction.
>
> Rob
More information about the Beginners
mailing list