| 
|   | ResetOnCopy () | 
|   | Default constructor performs zero-initialization for built-in types; default initialization for class types.  More...
  | 
|   | 
|   | ResetOnCopy (const T &value) | 
|   | Construct or implicitly convert from an object of type T if there is a suitable copy constructor available.  More...
  | 
|   | 
|   | ResetOnCopy (T &&value) | 
|   | Construct or implicitly convert from an rvalue object of type T if thereis a suitable move constructor available, otherwise use the copy constructor if available, otherwise fails to compile.  More...
  | 
|   | 
|   | ResetOnCopy (const ResetOnCopy &) | 
|   | Copy constructor behaves identically to the default constructor; the supplied source argument is ignored.  More...
  | 
|   | 
|   | ResetOnCopy (ResetOnCopy &&source) | 
|   | Move constructor is simply a pass-through to the move constructor of the contained object so behaves normally.  More...
  | 
|   | 
| ResetOnCopy &  | operator= (const ResetOnCopy &ignored) | 
|   | Copy assignment reinitializes this object to its default-constructed condition; the source argument is ignored.  More...
  | 
|   | 
| ResetOnCopy &  | operator= (ResetOnCopy &&source) | 
|   | Move assignment is simply a pass-through to the move assignment of the contained object so behaves normally.  More...
  | 
|   | 
| ResetOnCopy &  | operator= (const T &value) | 
|   | Assignment from an object of type T uses T's copy assignment operator if there is a suitable copy assignment operator available.  More...
  | 
|   | 
| ResetOnCopy &  | operator= (T &&value) | 
|   | Assignment from an rvalue object of type T uses T's move assignment operator if available, otherwise uses copy assignment if available, otherwise fails to compile.  More...
  | 
|   | 
| const T &  | getT () const | 
|   | Return a const reference to the contained object of type T.  More...
  | 
|   | 
| T &  | updT () | 
|   | Return a writable reference to the contained object of type T.  More...
  | 
|   | 
template<class T>
class SimTK::ResetOnCopy< T >
Ensures that a data member of type T is automatically reset to its default value upon copy construction or copy assignment. This allows the compiler-generated default copy methods to be used. 
Here are some usage examples: 
class Thing {
    
    
    
    ResetOnCopy<int>                     m_defint;
    ResetOnCopy<char>                    m_charZ = 'z';
    ResetOnCopy<string>                  m_defstr;
    ResetOnCopy<string>                  m_strHelloC = "hello";
    ResetOnCopy<string>                  m_strGoodbyeS = "goodbye"s;
    ResetOnCopy<short>                   m_shArr[3] = {9,8,7};
    ResetOnCopy<SubsystemIndex>          m_subIx{5};
    ResetOnCopy<std::vector<string>>     m_vstr {"one", "two", "three"};
    
    ResetOnCopy<const int*>              m_ptr;
    
    ResetOnCopy<unique_ptr<Array_<int>>> m_up{new Array_<int>({1,2,3})};
};
Other than copy behavior, an object of type ResetOnCopy<T> behaves just like the underlying object of type T. It will implicitly convert to T when needed, and inherit constructors, assignment, and other methods from T. Move construction and move assignment behave as they would for T, and an assignment from an object of type T to an object of type ResetOnCopy<T> will invoke T's ordinary copy assignment operator if there is one, and fail to compile if an attempt is made to use a non-existent assignment operator.
If T is a C++ built-in "scalar" type (arithmetic, character, or pointer type) it will be reset to T(0) or nullptr when copy constructed or copy assigned. We don't allow T to be an enumerated type here since resetting an enum to zero isn't always reasonable; use ReinitOnCopy<T> instead and provide an initializing enumerator. For class types T, copy construction and copy assignment will use the default constructor. ResetOnCopy<T> adds CopyConstructible and CopyAssignable concepts to move-only classes like std::unique_ptr, but those operations just reset the object to its default-constructed condition.
- Template Parameters
 - 
  
    | T | Template type that is a numeric, character, or pointer built-in type, or a class type that is DefaultConstructible and Destructible. Enum and array types are not allowed. | 
  
   
- See also
 - ReinitOnCopy if you want to reset to a non-default value or use an enum.