Do you know why `const T&` can bind to lvalue and rvalue? Do you know `T &&`? Do you know how to preserve the original type as input value? Do you know `perfect forwarding`? If any of these questions is unclear, don't hesitate to read this blog.
RAII --- Resource Acquisition Is Initialization. This is a C++ programming technique which binds the life cycle of a resource that must be acquired before use to the lifetime of an object.