Questa è una domanda di base, ma non ho trovato un post precedente a riguardo. Il titolo del seguente domanda suona come potrebbe essere la stessa domanda come la mia, ma la domanda stessa non corrisponde al titolo: is it better to use shared_ptr.reset or operator =?std :: shared_ptr: reset() vs. assegnazione
Sono confuso circa lo scopo della funzione reset()
membro del std::shared_ptr
: che cosa contribuisce oltre all'operatore di assegnazione?
Per essere concreti, data la definizione:
auto p = std::make_shared<int>(1);
sono le seguenti due linee equivalenti:
p = std::make_shared<int>(5); p.reset(new int(5));
Che dire questi:
p = nullptr; p.reset();
Se le due linee sono equivalenti in entrambi i casi, qual è lo scopo di reset()
?
MODIFICA: Lasciatemi ripetere la domanda per sottolineare meglio il suo punto. La domanda è: c'è un caso in cui lo reset()
ci consente di ottenere qualcosa che non è altrettanto facilmente ottenibile senza di esso?
@MeirGoldenberg, chiamando 'reset' su un' shared_ptr' cambia l'oggetto gestito a quello fornito dal puntatore e non dovrebbe essere proprietario di nessun altro 'shared_ptr'.Mentre 'operator =' implicherebbe la condivisione della proprietà con un altro 'shared_ptr' (a meno che, ovviamente, non si stia eseguendo move-assign). – Alejandro
"Non dovrebbe essere di proprietà"? È fatto rispettare o è solo un accordo? Sarebbe bello se questo commento e un esempio diventassero una risposta a tutti gli effetti. – AlwaysLearning
Questo si riduce alla differenza tra la costruzione di un 'shared_ptr' da un puntatore raw e l'uso di' make_shared', che dovrebbe essere banale da scoprire. Suggerimento: c'è una differenza e a volte può essere significativa. –