checkpoint
add some rvalue ref
remove dangerous perfect worwarding copy constructor