noncopyable types
Why implement custom copy constructor in C++?