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) |
(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
Exceptions
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) |