std::unique_ptr<T,Deleter>:: operator*, std::unique_ptr<T,Deleter>:: operator->
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
unique_ptr::operator*
unique_ptr::operator->
|
||||
| Non-member functions | ||||
|
(C++14)
(C++20)
|
||||
|
(until C++20)
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
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
Excepciones
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) |