Glas :Re: [glas] Reference counting? |
From: Bert Rodiers (bert.rodiers_at_[hidden])
Date: 2007-10-12 09:53:00
Hello Karl,
In RogueWave they do the following:
A vector has a view, which on its turn points to the actual data (a C++ data
structure aggregating the data).
When you for example apply a slice on your vector you get a new vector with
a different view on the same data (the sharing of the data happens with
reference counting, and the view keeps track of the new start, length and
stride). The data is cleaned up at the moment no views exist anymore. For
matrices and higher dimension structures they also apply this so that when
you extract a column from a matrix the data is shared between the original
matrix and the vector which was the result of the slice.
Regards,
Bert
There you have
On 12/10/2007, Karl Meerbergen <Karl.Meerbergen_at_[hidden]> wrote:
>
> Hi Bert,
>
> This is the idea of a boost::shared_ptr.
> It is clear that this might help in some cases for improving reliability
> of code.
>
> If I understand Neal well, the situation could be the following:
> you create a matrix.
> Later, you create an object that is a proxy to a row of this matrix.
> If you have reference counting, the programmer can destroy the matrix
> before the row proxy. Without the reference count, the proxy should be
> destroyed before the matrix.
>
> At this stage, this mechanism is indeed not provided. In practice, it
> would imply adding a boost::shared_ptr in all containers. This is
> possible, but could it not create undesired overhead?
>
> One of the great things of generic programming is that we can provide
> containers and proxies that support reference counting in addition to
> containers and proxies that do not use reference counting :-)
>
> Karl
>
>
>
> Bert Rodiers wrote:
>
> > Hello Karl,
> >
> > An example:
> >
> > You have a class CVec, the data is stored in seperate class CView to
> > which CVec points. CView also has a reference count. At the moment you
> > create a CVec a CView is recreated with reference count 1, when a new
> > CVec is created from an existing one, the CView is being shared and
> > the reference count is increased (with a function call). When a CVec
> > is destroyed, you decrease the reference count (with a function call)
> > and when the reference count becomes zero you destroy the object.
> > I could point you to books that discuss reference counting in more
> > detail...
> >
> > Regards,
> > Bert
> >
> >
> > On 12/10/2007, *Karl Meerbergen* < Karl.Meerbergen_at_[hidden]
> > <mailto:Karl.Meerbergen_at_[hidden]>> wrote:
> >
> > Hi Neal,
> >
> > I have not thought of this. I am a bit puzzled. Can you explain
> > what you
> > mean by reference counting? Do you mean that a container will only
> > disappear when all its references by other objects disappear?
> >
> > Thanks,
> >
> > Karl
> >
> >
> >
> > Neal Becker wrote:
> >
> > >I'm looking at the glas alpha docs. I've been studying blitz++
> > recently, and
> > >I have (so far) liked the use of reference counting.
> > >
> > >A slice of an array returns a (shared) view of the array
> > data. Reference
> > >counting is used for memory management.
> > >
> > >I read the comments in glas regarding assignment vs. copy
> > construction. Have
> > >you considered using ref counting instead?
> > >_______________________________________________
> > >glas mailing list
> > > glas_at_[hidden] <mailto:glas_at_[hidden]>
> > > http://lists.boost.org/mailman/listinfo.cgi/glas
> > >
> > >
> >
> >
> > _______________________________________________
> > glas mailing list
> > glas_at_[hidden] <mailto:glas_at_[hidden]>
> > http://lists.boost.org/mailman/listinfo.cgi/glas
> >
> >
> >------------------------------------------------------------------------
> >
> >_______________________________________________
> >glas mailing list
> >glas_at_[hidden]
> >http://lists.boost.org/mailman/listinfo.cgi/glas
> >
>
>
> _______________________________________________
> glas mailing list
> glas_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/glas
>
>