This mega-pattern is present in 90% of java and c# classes!
Three related choices for a member variable:
- Raw pointer
- Smart ptr
- char pointer, usually a c-str
In each case, we worry about
- construction of this field
- freeing heap memory
- what if the pointee is not on heap?
- copy control of this field
- ownership of the pointer
- when to return raw ptr and when to return a smart ptr