2013-09-26 5 views

risposta

18

Il compilatore è permesso di valutare che l'espressione nel seguente ordine:

auto __temp1 = new int(42); 
auto __temp2 = g(); 
auto __temp3 = shared_ptr<int>(__temp1); 
f(__temp3, __temp2); 

Si può vedere che se g() tiri liberi, quindi l'oggetto allocato non viene mai eliminato.

Utilizzando make_shared, non è possibile ottenere nulla tra l'assegnazione dell'oggetto e l'inizializzazione del puntatore intelligente per gestirlo.

+0

+1. Sì, questo è il motivo, stavo per scriverlo, ma ho parlato prima del costruttore e mi sono incasinato. – Nawaz

Problemi correlati