PiraLezz ha scritto:
Ok, ora ho capito . Grazie mille per il tuo tempo e disponibilità!!
Per chiarezza, dato che hai usato unique_ptr in un contesto inusuale, tieni in mente che
unique_ptr fa parte della famiglia degli
smartpointer introdotti con lo standard C++11. Viene usato principalmente per dare il "potere" di usare un puntatore solo ad una variabile unique_ptr, inoltre permette di deallocare le risorse a cui punta il puntatore passato ad unique_ptr in modo da evitare memory leak.
Vedi il codice seguente:
std::string* prova = new std::string("testo");
std::unique_ptr<std::string> s_p(prova);
std::cout << "s_p before : I manage the pointer: " <<*s_p << std::endl;
//s_p non ha alcun puntatore assegnato
std::unique_ptr<std::string> s_p2;
if (s_p2.get() == nullptr)
std::cout << "s_p2 before : Manage nothing..." << std::endl;
//passa la proprieta' del puntatore prova da s_p ad s_p2
s_p2 = std::move(s_p); //assegni la proprietà del puntatore 'prova' a s_p2
if (s_p2.get() != nullptr)
std::cout << "s_p2 after: I manage the pointer: " << *s_p2 << std::endl;
if (s_p.get() == nullptr)
std::cout << "s_p after : I not manage the pointer!!!\n";
else
std::cout << "s_p after : I still manage the pointer:\n" << *s_p << std::endl;
Questo è un esempio di passaggio di "proprietà" del puntatore
prova. Ti assicuri che solo uno degli smartpointer gestisce quel puntatore e sarà delegato a liberare la memoria associata ad esso.