$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [shared_ptr] Set pointer to null
From: Mateusz Loskot (mateusz_at_[hidden])
Date: 2009-11-09 09:45:09
Sebastian Redl wrote:
> 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.
Yes, I aware of that. I use this undefined behaviour effect
with premeditaion under Visual C++. But I agree it's extremely ugly.
> 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 ...
Right.
At least, I've got confirmed that it's a good idea to not to follow
this idea.
Best regards,
-- Mateusz Loskot, http://mateusz.loskot.net