Re: Does std::unique_ptr support self-reset?
Am 12.08.2013 19:48, schrieb Greg Marr:
On Monday, August 12, 2013 10:23:38 AM UTC-4, SG wrote:
Actually, this looks good to me. It does not support self-reset but it
does not have to according to the standard. What do you think is
non-conforming about it?
It does support self-reset, exactly as does the MSVC implementation
that Daniel Krugler said is non-conforming, because it doesn't
call get_deleter()(old_value) if the old value and the new value
are the same.
Not true. See below.
This is different than the reset() later in the same file, which is
void
reset(pointer __p = pointer()) noexcept
{
using std::swap;
swap(std::get<0>(_M_t), __p);
if (__p != nullptr)
get_deleter()(__p);
}
The difference is
if (__p != nullptr)
vs
if (__p != pointer())
I think you got confused with the meaning of pointer(). pointer() is not
a function like get() that returns the current address. pointer()
creates a null pointer value because pointer is a typedef for the
pointer type (a typedef from the deleter class IIRC) much like int() is
equal to zero. So,
if (__p != pointer())
checks whether p differs from a null pointer and not whether __p differs
from the value returned by get().
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]