Boost logo

Boost :

Subject: Re: [boost] [shared_ptr] Set pointer to null
From: Sebastian Redl (sebastian.redl_at_[hidden])
Date: 2009-11-09 09:06:26


Mateusz Loskot wrote:
> Hi,
>
> I'd like to make a custom deleter resetting pointer to 0 or other value
> (e.g. for debugging purposes) after resource has been deallocated.
> Would anyone suggest better option to this presented below?
>
> struct DeleterT
> {
> void operator()(::T* ptr)
> {
> ::DestroyT(ptr);
>
> // uses Visual C++ specific integer type
> *reinterpret_cast<__int64*>(&ptr) = 0;
> }
> };
This doesn't actually do anything. The code is undefined (accessing
casted pointer, aliasing violation), but even the most common
interpretation simply does the same thing as "ptr = 0;". ptr is a by-val
argument. You cannot know where the original member you want to reset
is, so you can't reset it. All you are modifying here is your local
function argument - and possibly the function return address, if you're
on a 32-bit system ...

Sebastian


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk