👉Smart Pointer
File d'intestazione: <memory>
void UseRawPointer()
{
// Using a raw pointer -- not recommended.
Song* pSong = new Song(L"Nothing on You", L"Bruno Mars");
// Use pSong...
// Don't forget to delete!
delete pSong;
}
void UseSmartPointer()
{
// Declare a smart pointer on stack and pass it the raw pointer.
unique_ptr<Song> song2(new Song(L"Nothing on You", L"Bruno Mars"));
// Use song2...
wstring s = song2->duration_;
//...
} // song2 is deleted automatically here.unique_ptrConsente esattamente un proprietario del puntatore sottostante. Utilizzarlo come scelta predefinita per POCO, a meno che non sia necessario unshared_ptr. Può essere spostato a un nuovo proprietario, ma non copiato o condiviso. Sostituisceauto_ptr, che è deprecato.unique_ptrè piccolo ed efficiente; la dimensione è un puntatore e supporta riferimenti "rvalue" per l'inserimento e il recupero rapidi dalle raccolte di librerie standard C++shared_ptrPuntatore intelligente con conteggio dei riferimenti. Utilizzarlo quando si desidera assegnare un puntatore non elaborato a più proprietari, ad esempio quando si restituisce una copia di un puntatore da un contenitore, ma si desidera conservare l'originale. Il puntatore non elaborato non viene eliminato finché tutti i proprietari dishared_ptrnon sono usciti dall'ambito o non hanno ceduto in altro modo la proprietà. Ha le dimensioni di due puntatori, uno per l'oggetto e uno per il blocco di controllo condiviso che contiene il conteggio dei riferimenti.weak_ptrPuntatore intelligente per casi speciali da utilizzare insieme ashared_ptr.weak_ptrfornisce l'accesso a un oggetto di proprietà di una o più istanze dishared_ptr, ma non partecipa al conteggio dei riferimenti. Utilizzarlo quando si desidera osservare un oggetto, ma non è necessario che rimanga attivo. Necessario in alcuni casi per interrompere i riferimenti circolari tra istanze dishared_ptr
Last updated