std::shared_ptr<T>::get
De cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
T* get() const noexcept; |
(hasta C++17) | |
element_type* get() const noexcept; |
(desde C++17) | |
Devuelve el puntero almacenado.
Parámetros
(Ninguno)
Valor de retorno
El puntero almacenado.
Notas
Un shared_ptr puede compartir la posesión de un objeto mientras almacena un puntero a otro objeto. get() devuelve el puntero almacenado, no el puntero gestionado.
Ejemplo
Ejecuta este código
#include <iostream>
#include <memory>
#include <string_view>
int main()
{
auto salida = [](std::string_view mensaje, int const* ptr) {
std::cout << mensaje << *ptr << " en " << ptr << "\n";
};
int* ptr = new int(42);
std::shared_ptr<int> pCompartido = std::make_shared<int>(42);
salida("Puntero sin formato ", ptr);
// salida("Puntero compartido ", pCompartido); // ERROR
salida("Puntero compartido with get() ", pCompartido.get());
delete ptr;
std::cout << "\nDemo del constructor de alias de shared_ptr.\n";
struct Base1 { int i1{}; };
struct Base2 { int i2{}; };
struct Derivada : Base1, Base2 { int i3{}; };
std::shared_ptr<Derivada> p(new Derivada());
std::shared_ptr<Base2> q(p, static_cast<Base2*>(p.get()));
std::cout << "q comparte posesión con p, pero apunta al subobjeto Base2:\n"
<< "p.get(): " << p.get() << '\n'
<< "q.get(): " << q.get() << '\n'
<< "&(p->i1): " << &(p->i1) << '\n'
<< "&(p->i2): " << &(p->i2) << '\n'
<< "&(p->i3): " << &(p->i3) << '\n'
<< "&(q->i2): " << &(q->i2) << '\n';
}
Véase también
| Desreferencia el puntero almacenado. (función miembro pública) |