use unique_ptr instead of shared_ptr for non shared instances