Thread-topic: Creating a Handle from an existing memory
Sorry... I forgot that PtrToHand and PtrToXHand use a copy of the data,
and that's why I asked my original question. So the test I made doesn't
really prove anything regarding to carbon.
But I still believe the idea behind what I'm looking for is perfectly
valid. The internals of a Handle could very well include an memory
ownership bit, which tells the system whether to deallocate or not. And
then a function like my proposed MemoryToHandle (or more appropriately
WrapMemoryByHandle) would make perfect sense.
> -----Original Message-----
> From: Yaron Tadmor
> Sent: Tuesday, June 12, 2007 10:43 AM
> To: 'Laurence Harris'
> Cc: carbon-dev
> Subject: RE: Creating a Handle from an existing memory
>
> A simple no would do the trick.
> There's no need to disrespect, especially when you might be wrong.
>
> If you look at various packages supplying memory management, some
allow
> you to pass your own memory and even your own deallocation method. For
> example, boost:share_ptr. By default, when reference counting drops to
0,
> it calls c++ delete on the object. But you could very well pass a
deleter
> object which does something else.
>
> So it's perfectly fine to assume such a MemoryToHandle function can be
> available, marking that handle as a "no delete" handle. Meaning that
when
> it's released, the memory is not to be deleted, and deletion should be
> handled by the user. Carbon has quite a few examples of such things.
>
> And as a test, I tried using PtrToHand and PtrToXHand, passing my c++
> allocated memory instead of a real Ptr allocated by the system. Guess
> what.... It worked!!! Releasing the handle, did not try to delete the
> memory, as I would expect.
>
> So, yes, I've been programming long enough to know such questions are
> certainly in place.
>
>
>
> > -----Original Message-----
> > From: Laurence Harris [mailto:email@hidden]
> > Sent: Monday, June 11, 2007 7:48 PM
> > To: Yaron Tadmor
> > Cc: carbon-dev
> > Subject: Re: Creating a Handle from an existing memory
> >
> >
> > On Jun 11, 2007, at 1:03 PM, Yaron Tadmor wrote:
> >
> > > Hi,
> > >
> > > Is there a way to create a handle from an already existing memory
> > > area? For example, can I do something like this:
> > >
> > > Char *myP = new char[100];
> > >
> > > Handle myH = MemoryToHandle (myP, 100);
> > No. There never has been. If there were, it would be in MacMemory.h.
> > If you anticipate needing the functionality of a Handle you should
> > allocate the memory that way initially.
> >
> > Besides, if you did something like the above it wouldn't work
anyway.
> > The memory in your example was allocated with a C++ new allocation.
> > You then pass it off to a Memory Manager data type, which would
> > ultimately release it with free instead of your C++ delete. It needs
> > to be released with:
> >
> > delete [] myP;
> >
> > and that's not going to happen inside DisposeHandle.
> >
> > You've been programming for a long time. Why are you asking such
> > questions?
> >
> > Larry
> >
> > >
> > > I saw there is a PtrToHand and PtrToXHand, but they use copying.
> > >
> > > Thanx
> > >
> > > Yaron Tadmor
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Carbon-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/carbon-dev/email@hidden
This email sent to email@hidden