Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.c++.moderated    |    Moderated discussion of C++ superhackery    |    33,346 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 33,170 of 33,346    |
|    SG to All    |
|    Re: Does std::unique_ptr support self-re    |
|    12 Aug 13 17:16:38    |
   
   From: sgesemann@googlemail.invalid   
      
   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! ]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca