Versione con smart pointer