Skip to content
  • Mark OLESEN's avatar
    ENH: cleanup autoPtr class (issue #639) · 660f3e54
    Mark OLESEN authored
    Improve alignment of its behaviour with std::unique_ptr
    
      - element_type typedef
      - release() method - identical to ptr() method
      - get() method to get the pointer without checking and without releasing it.
      - operator*() for dereferencing
    
    Method name changes
    
      - renamed rawPtr() to get()
      - renamed rawRef() to ref(), removed unused const version.
    
    Removed methods/operators
    
      - assignment from a raw pointer was deleted (was rarely used).
        Can be convenient, but uncontrolled and potentially unsafe.
        Do allow assignment from a literal nullptr though, since this
        can never leak (and also corresponds to the unique_ptr API).
    
    Additional methods
    
      - clone() method: forwards to the clone() method of the underlying
        data object with argument forwarding.
    
      - reset(autoPtr&&) as an alternative to operator=(autoPtr&&)
    
    STYLE: avoid implicit conversion from autoPtr to object type in many places
    
    - existing implementation has the following:
    
         operator const T&() const { return operator*(); }
    
      which means that the following code works:
    
           autoPtr<mapPolyMesh> map = ...;
           updateMesh(*map);    // OK: explicit dereferencing
           updateMesh(map());   // OK: explicit dereferencing
           updateMesh(map);     // OK: implicit dereferencing
    
      for clarity it may preferable to avoid the implicit dereferencing
    
    - prefer operator* to operator() when deferenced a return value
      so it is clearer that a pointer is involve and not a function call
      etc    Eg,   return *meshPtr_;  vs.  return meshPtr_();
    660f3e54