template<typename T>
CopyPtr class
A smart pointer that allocates its pointee on the heap and provides value copy semantics.
Unlike unique_ptr, the pointer can be copied. Unlike shared_ptr, the pointee is not shared; each copy results in a new instance.