Namespaces
Variants

std::unique_ptr<T,Deleter>:: operator*, std::unique_ptr<T,Deleter>:: operator->

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
typename std:: add_lvalue_reference < T > :: type operator * ( ) const
noexcept ( noexcept ( * std:: declval < pointer > ( ) ) ) ;
(1) (desde C++11)
(constexpr desde C++23)
pointer operator - > ( ) const noexcept ;
(2) (desde C++11)
(constexpr desde C++23)

operator * y operator - > proporcionan acceso al objeto poseído por * this .

Estas funciones miembro solo se proporcionan para unique_ptr para objetos individuales, es decir, la plantilla principal.

1) Si std :: reference_converts_from_temporary_v
< std:: add_lvalue_reference_t < T > ,
decltype ( * std:: declval < pointer > ( ) ) >
es true , el programa está mal formado.
(desde C++23)

Si get ( ) es un puntero nulo, el comportamiento es indefinido.

Contenidos

Valor de retorno

1) Devuelve el objeto poseído por * this , equivalente a * get ( ) .
2) Devuelve un puntero al objeto poseído por * this , es decir, get ( ) .

Excepciones

1) Puede lanzar una excepción si pointer tiene un operator * que lance excepciones.

Notas

El uso de std::add_lvalue_reference permite instanciar std:: unique_ptr < void > ya que void & no está permitido en C++ mientras que std:: add_lvalue_reference < void > produce void . Consulte LWG673 para más detalles.

Ejemplo

#include <iostream>
#include <memory>
struct Foo
{
    void bar() { std::cout << "Foo::bar\n"; }
};
void f(const Foo&) 
{
    std::cout << "f(const Foo&)\n";
}
int main() 
{
    std::unique_ptr<Foo> ptr(new Foo);
    ptr->bar();
    f(*ptr);
}

Salida:

Foo::bar
f(const Foo&)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2762 C++11 operator * podría ser potencialmente lanzador de excepciones
incluso si * get ( ) era noexcept
añadida una especificación
condicional de excepciones
LWG 4148 C++23 operator * podría devolver una referencia colgante si
element_type* difiere de Deleter::pointer
el programa está mal
formado en este caso

Véase también

devuelve un puntero al objeto gestionado
(función miembro pública)