Use unique_ptr instead of shared_ptr