Ce face std::unique_ptr::get
p.get() îți dă adresa obiectului (un T* obișnuit), dar unique_ptr-ul îl deține în continuare și îl va șterge. Se folosește când o funcție are nevoie doar să citească sau să modifice obiectul, fără să-l preia.
Dacă pointerul este gol, get() returnează nullptr.
Ce returnează
Pointerul brut (T*) sau nullptr.
Exemple
Exemplul 1: Trimiterea obiectului unei funcții care doar îl folosește
Funcția primește un pointer brut: nu preia proprietatea și nu șterge nimic.
#include <memory>
#include <print>
#include <string>
struct Elev {
std::string nume;
double medie;
};
void afiseaza(const Elev* e) {
if (e) {
std::println("{}: {}", e->nume, e->medie);
}
}
int main() {
auto ana = std::make_unique<Elev>("Ana", 9.5);
afiseaza(ana.get());
std::unique_ptr<Elev> gol;
std::println("gol.get() == nullptr: {}", gol.get() == nullptr);
}
Rezultat
Ana: 9.5
gol.get() == nullptr: true
Greșeli frecvente
- Apelezi
delete p.get()sau pui rezultatul în altunique_ptr. Obiectul va fi șters de două ori: comportament nedefinit. - Păstrezi pointerul brut după ce
unique_ptr-ul a fost distrus sau resetat. Pointerul arată spre memorie eliberată.
Comenzi înrudite
std::unique_ptr: Pointer inteligent care deține singur un obiect și îl șterge automat când iese din domeniu.std::unique_ptr::reset: reset șterge obiectul deținut (și poate prelua altul); release renunță la proprietate fără să șteargă.pointeri (*, &): Un pointer este o variabilă care ține adresa altei variabile; prin el poți citi și modifica valoarea de la acea adresă.