Fammi provare ad elaborarlo.
Frame stack: quando eseguiamo una funzione, crea uno stack in cui risiedono tutte le variabili e le istruzioni locali.
E Puntatore intelligente: un puntatore intelligente come std::unique_ptr
consente di modificare la proprietà dell'oggetto all'interno del puntatore intelligente.
Ora la mia confusione è: supponiamo di passare un unique_ptr
da una funzione sorgente a una funzione target , il rvalue
sarà assegnato al puntatore target da% codice%. Ora se la funzione termina, il frame dello stack verrà deallocato. Quindi std::move
nella funzione obiettivo sarà un puntatore pendente, poiché unique_ptr
punta alla stessa posizione di memoria che si trova nello stack frame della funzione sorgente?
Una cosa che ho pensato è, poiché la durata della funzione target sarà terminata prima della vita della funzione sorgente. In modo che non causi tali effetti collaterali. Ma in applicazioni più complesse con ambiente multi-thread, come va? O di cosa dobbiamo occuparci?