refactoring with c++11, remove noncopyable