using unique_ptr instead of auto_ptr