Espaces de noms
Variantes
Affichages
Actions

std::shared_ptr

De cppreference.com
< cpp‎ | memory
 
 
 
La gestion dynamique de la mémoire
Faible niveau de gestion de la mémoire
Répartiteurs
Original:
Allocators
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
allocator
allocator_traits (C++11)
allocator_arg_t (C++11)
allocator_arg (C++11)
uses_allocator (C++11)
scoped_allocator_adaptor (C++11)
Non initialisée stockage
Original:
Uninitialized storage
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
uninitialized_copy
uninitialized_copy_n (C++11)
uninitialized_fill
uninitialized_fill_n
raw_storage_iterator
get_temporary_buffer
return_temporary_buffer
Pointeurs intelligents
Original:
Smart pointers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
unique_ptr (C++11)
shared_ptr (C++11)
weak_ptr (C++11)
auto_ptr (obsolète)
owner_less (C++11)
enable_shared_from_this (C++11)
bad_weak_ptr (C++11)
default_delete (C++11)
Soutien garbage collection
Original:
Garbage collection support
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
declare_reachable (C++11)
undeclare_reachable (C++11)
declare_no_pointers (C++11)
undeclare_no_pointers (C++11)
pointer_safety (C++11)
get_pointer_safety (C++11)
Divers
Original:
Miscellaneous
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
pointer_traits (C++11)
addressof (C++11)
align (C++11)
Bibliothèque C
Original:
C Library
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
 
std::shared_ptr
Les fonctions membres
Original:
Member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
shared_ptr::shared_ptr
shared_ptr::~shared_ptr
shared_ptr::operator=
Modificateurs
Original:
Modifiers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
shared_ptr::reset
shared_ptr::swap
Des observateurs
Original:
Observers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
shared_ptr::get
shared_ptr::operator*
shared_ptr::operator->
shared_ptr::use_count
shared_ptr::unique
shared_ptr::operator bool
shared_ptr::owner_before
Tiers fonctions
Original:
Non-member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
std::swap
make_shared
allocate_shared
static_pointer_cast
dynamic_pointer_cast
const_pointer_cast
get_deleter
operator==
operator|=
operator<
operator<=
operator>
operator>=
operator<<
atomic_is_lock_free
atomic_load
atomic_load_explicit
atomic_store
atomic_store_explicit
atomic_exchange
atomic_exchange_explicit
atomic_compare_exchange_weak
atomic_compare_exchange_strong
atomic_compare_exchange_weak_explicit
atomic_compare_exchange_strong_explicit
std::hash
 
Defined in header <memory>
template< class T > class shared_ptr;
(depuis C++11)

std::shared_ptr est un pointeur intelligent qui permet le partage d'un objet via un pointeur. Plusieurs instances de shared_ptr peuvent posséder le même objet, et cet objet est détruit dans l'un des cas suivant :

  • le dernier shared_ptr possédant l'objet est détruit ;
  • le dernier shared_ptr possédant l'objet est assigné à un autre pointeur via operator=() or reset().

L'objet est détruit en utilisant delete-expression ou un destructeur personnalisé fourni à la construction du shared_ptr.

Un shared_ptr peut partager la possession d'un objet tout en gardant un pointeur sur un autre objet. Cela peut être utilisé pour pointer sur un objet membre, tout en possédant l'objet auquel il appartient.

Un shared_ptr peut aussi ne pas posséder d'objet, il est alors qualifié de vide.

shared_ptr répond aux conditions de CopyConstructible et CopyAssignable.

Sommaire

[modifier] Types de membres

Type du membre Définition
element_type T

[modifier] Fonctions membres

Construit un nouveau shared_ptr
(fonction membre publique) [edit]
Détruit l'objet possédé si plus aucun shared_ptrs n'y est lié
(fonction membre publique) [edit]
assigne le shared_ptr
(fonction membre publique) [edit]
Manipulateurs
remplace l'objet géré
Original:
replaces the managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
permute les objets gérés
Original:
swaps the managed objects
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
Accès aux éléments
renvoie un pointeur sur l'objet géré
Original:
returns a pointer to the managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
déréférence le pointeur à l'objet géré
Original:
dereferences pointer to the managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
retourne le nombre d'objets shared_ptr se référant au même objet géré
Original:
returns the number of shared_ptr objects referring to the same managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
vérifie si l'objet géré est gérée uniquement par l'instance actuelle shared_ptr
Original:
checks whether the managed object is managed only by the current shared_ptr instance
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
vérifie si il est associé objet géré
Original:
checks if there is associated managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]
fournit propriétaire-fondé l'ordre des pointeurs partagés
Original:
provides owner-based ordering of shared pointers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique) [edit]

[modifier] Fonctions annexes

crée un pointeur partagé qui gère un nouvel objet
Original:
creates a shared pointer that manages a new object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
crée un pointeur partagé qui gère un nouvel objet alloué à l'aide d'un allocateur
Original:
creates a shared pointer that manages a new object allocated using an allocator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
static_cast s'applique, dynamic_cast ou const_cast le type de l'objet géré
Original:
applies static_cast, dynamic_cast or const_cast to the type of the managed object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
retourne le deleter du type spécifié, s'il était possédé
Original:
returns the deleter of specified type, if owned
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
compare avec un autre ou avec shared_ptr nullptr
Original:
compares with another shared_ptr or with nullptr
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
délivre en sortie la valeur du pointeur est parvenu à un flux de sortie
Original:
outputs the value of the managed pointer to an output stream
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
l'algorithme spécialisé std::swap
Original:
specializes the std::swap algorithm
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
spécialise les opérations atomiques
(fonction générique) [edit]

[modifier] Classes d'aide

Support du hachage pour std::shared_ptr
(classe générique spécialisée) [edit]

[modifier] Notes

La possession d'un objet peut être partagée avec un autre shared_ptr seulement en le copiant ou en l'utilisant pour le constructeur par copie d'un autre shared_ptr. Construire un nouveau shared_ptr en utilisant le pointeur nu sous-jacent (en utilisant par exemple get()) conduit à un comportement indéfinit.

[modifier] Notes d'implémentation

Dans une implémentation typique, std::shared_ptr conserve deux pointeurs :

  • Un pointeur vers l'objet géré
  • Un pointeur vers le bloc de contrôle

Le bloc de contrôle est un objet alloué dynamiquement qui conserve :

  • soit un pointeur vers l'objet géré, soit l'objet géré lui-même
  • le destructeur (type-erased)
  • l'allocateur (type-erased)
  • le nombre de shared_ptrs qui possèdent l'objet géré
  • le nombre de weak_ptrs qui pointent sur l'objet géré

Quand un shared_ptr est créé en appellant std::make_shared ou std::allocate_shared, la mémoire du bloc de contrôle et celle de l'objet géré sont créées en une seule allocation. L'objet géré est construit directement dans un membre du bloc de contrôle. Quand shared_ptr est créé par l'un des constructeurs de shared_ptr, l'objet géré et le bloc de contrôle doivent être alloués séparéments. Dans ce cas, le bloc de contrôle conserve un pointeur vers l'objet géré.

Le pointeur conservé directement par le shared_ptr est celui retourné par get(), tandis que le pointeur / l'objet conservé par le bloc de contrôle est celui qui sera détruit lorsque le nombre de possesseurs partagés atteind zéro. Ces pointeurs ne sont pas forcéments équivalents.

Le destructeur de shared_ptr décrémente le nombre de possesseurs du bloc de contrôle. Si ce compteur atteind zéro, le bloc de contrôle appelle le destructeur de l'objet géré. Le bloc de contrôle ne se désalloue pas lui-même tant que le compteur du std::weak_ptr n'a pas aussi atteind zéro.