Ribadisco, visto che da quanto ho capito il lifetime di questi oggetti è limitato al ciclo for lo smart pointer dovrebbe essere dichiarato nel ciclo for, così che si occupi automaticamente di distruggere l'istanza creata ad ogni iterazione. Non capisco perché lo dichiari a livello di classe: piuttosto passa alle funzioni che lo manipolano un puntatore ad esso.