|
Boost : |
From: E. Gladyshev (egladysh_at_[hidden])
Date: 2003-08-29 01:52:00
--- Gregory Colvin <gregory.colvin_at_[hidden]> wrote:
> On Thursday, Aug 28, 2003, at 23:48 America/Denver, E. Gladyshev wrote:
> > *pseudo-code*
> >
> > template< typename T >
> > sturct my_allocator
> > {
> > my_heap_control _heap;
> >
> > T* create()
> > {
> > return _heap.create();
> > }
> > void operator()( T* d )
> > {
> > _heap.destroy(d);
> > }
> > };
> >
> > Now if I do something like the following code (that looks perfecly
> > fine).
> >
> > f()
> > {
> > my_allocator<int> a;
> >
> > {
> > shared_ptr<int> s( a.create(), a );
> > ...
> > int* n = a.create();
> > a(n);
> > }
> > }
> >
> > I got a problem, because by the time when 's' deletes my data
> > the heap state is changed while 's' still has an old copy
> > of the heap state.
> >
> > * If we state that boost allocators must be implemented
> > like statless policies not like real data types,
> > this problem is not a big deal.
>
> I am not understanding the above at all, maybe because I don't
> know what you mean by "heap control block" or "stateless policies"
> or "real data types".
I called "stateless policies" data types that define some actions
(policies) that never change the state of any of this data
type instances.
The "heap control block" is a data type that manages
the state of a memory heap. For instance it can keep
a list/directory of pointers to free block in the heap.
No imagine the the my_allocator has a list of pointers
to free memory blocks in some memory heap.
template< typename T >
sturct my_allocator
{
char** _freeblocks[100];
};
When you write
shared_ptr<int> s( a.create(), a );
's' will create an internal copy of 'a'.
The internal copy will have a copy of _freeblocks[100];
Now we create a new object, that changes the state of _freeblocks[100]
int* n = a.create();
Next, 's' goes out scope and deallocates its object using
its own copy of _freeblocks[100] but this copy is already bad.
It doesn't represent the current configuration of free blocks
in the heap.
Does it make sense?
Eugene
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk