skynet ha scritto:
thnx shodan, sei sempre una miniera in materia STL. Grazie
Ma in Microsoft hanno implementato l'op di assegnamento?
http://msdn.microsoft.com/en-us/library/ee410580.asp
No. Se noti c'è il doppio && segno che è move semantics.
std::unique_ptr<T> a(new T);
std::unique_ptr<T> b = a; // errore;
std::unique_ptr<T> c = std::move(a); // ok;
std::unique_ptr<T> d;
d = a; // errore;
d = std::move(a); // ok
Premetto che non ho mai usato unique_ptr in un contesto avanzato solo test.
Nelle intenzioni dello standard, lo unique_ptr è lo smart pointer principale. Avendo una semantica di possesso esclusivo è utile quando vuoi avere una classe non copiabile senza dover rendere privati il costruttore di copia e l'operatore di assegnamento (che alla fine servono solo per i puntatori raw), ma è solo un esempio.
class Test {
unique_ptr<Q> mq;
public:
Test() {}
};
No costruttore di copia, no operatore di assegnamento, no distruttore.
Per quel che mi riguarda, uso gli unique_ptr praticamente sempre. Almeno mi evito la gestione manuale dei raw pointer. La cosa notevole è che sia lo unique_ptr (a livello di parametro template) sia lo shared_ptr consentono di specificare la funzione di cancellazione del puntatore interno (che di default è la delete).
Insomma, per come la vedo io, una volta che inizi a usarli non ne fai più a meno.