Item 6: Explicitly disallow the use of compiler-generated functions you do not want(Effective C++)
To disallow functionality automatically provided by compilers, declare the
corresponding member functions private and give no implementations.
Using a base class like Uncopyable is one way to do this.