std::unique_ptr::get în C++

Returnează pointerul brut către obiectul deținut, fără să renunțe la proprietate.

Sintaxă
pointer get() const noexcept;

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 alt unique_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ă.