Smart pointers: unique_ptr and shared_ptr