|
![](/i/fill.gif) |
Warp wrote:
> Darren New <dne### [at] san rr com> wrote:
>> Indeed. Especially if you use something like reference counting and deal
>> with circular references specially or something.
>
> What I meant is that,
Oh, I see. Yes, I guess that would work. Probably an excellent way to do it,
especially if you store enough info about things that you can do compacting
collections.
> On a different note, one example where I think the RAII mechanism is
> better than the Java-style GC mechanism is that RAII allows you to
> implement copy-on-write semantics (ie. "lazy copying") for objects.
I understand what you're saying, but this is a bad example for Java because
that's exactly how it would work in Java, because strings are immutable, so
your "+=" returns a brand new string. :-) That's why Java has a
StringBuilder as well as a String.
> Of course CoW requires reference counting of the data (or, more precisely,
> it needs a way to tell if the data is being shared or not). I don't know
> how you would do that in Java (transparently, or at all).
Very difficult in Java to think of a way, offhand. I don't think you can
overload pure assignment in C#, so I don't think you could do the same sort
of thing there easily either.
> This is possible transparently in C++ because of RAII: When objects are
> created, copied, assigned and destroyed, you can specify what happens.
I think it's more because you can overload the assignment operator, not the
RAII as such. Maybe you count that as part of RAII.
--
Darren New, San Diego CA, USA (PST)
Serving Suggestion:
"Don't serve this any more. It's awful."
Post a reply to this message
|
![](/i/fill.gif) |