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) (depuis C++11)
(constexpr depuis C++23)
pointer operator - > ( ) const noexcept ;
(2) (depuis C++11)
(constexpr depuis C++23)

operator * et operator - > permettent d'accéder à l'objet détenu par * this .

Ces fonctions membres sont uniquement fournies pour unique_ptr pour les objets uniques, c'est-à-dire le modèle principal.

1) Si std :: reference_converts_from_temporary_v
< std:: add_lvalue_reference_t < T > ,
decltype ( * std:: declval < pointer > ( ) ) >
est true , le programme est mal formé.
(depuis C++23)

Si get ( ) est un pointeur nul, le comportement est indéfini.

Table des matières

Valeur de retour

1) Retourne l'objet détenu par * this , équivalent à * get ( ) .
2) Retourne un pointeur vers l'objet possédé par * this , c'est-à-dire get ( ) .

Exceptions

1) Peut lever une exception si pointer a un operator * levant.

Notes

L'utilisation de std::add_lvalue_reference permet d'instancier std:: unique_ptr < void > car void & n'est pas autorisé en C++ tandis que std:: add_lvalue_reference < void > produit void . Voir LWG673 pour plus de détails.

Exemple

#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);
}

Sortie :

Foo::bar
f(const Foo&)

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2762 C++11 operator * pourrait potentiellement lever des exceptions
même si * get ( ) était noexcept
ajout d'une spécification d'exception
conditionnelle
LWG 4148 C++23 operator * pourrait retourner une référence pendante si
element_type* diffère de Deleter::pointer
le programme est mal
formé dans ce cas

Voir aussi

renvoie un pointeur vers l'objet géré
(fonction membre publique)