std::experimental::shared_ptr<T>:: shared_ptr
|
constexpr
shared_ptr
(
)
noexcept
;
|
(1) | |
|
constexpr
shared_ptr
(
std::
nullptr_t
)
noexcept
;
|
(2) | |
|
template
<
class
Y
>
explicit shared_ptr ( Y * ptr ) ; |
(3) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( Y * ptr, Deleter d ) ; |
(4) | |
|
template
<
class
Deleter
>
shared_ptr ( std:: nullptr_t ptr, Deleter d ) ; |
(5) | |
|
template
<
class
Y,
class
Deleter,
class
Alloc
>
shared_ptr ( Y * ptr, Deleter d, Alloc alloc ) ; |
(6) | |
|
template
<
class
Deleter,
class
Alloc
>
shared_ptr ( std:: nullptr_t ptr, Deleter d, Alloc alloc ) ; |
(7) | |
|
template
<
class
Y
>
shared_ptr ( const shared_ptr < Y > & r, element_type * ptr ) noexcept ; |
(8) | |
|
shared_ptr
(
const
shared_ptr
&
r
)
noexcept
;
|
(9) | |
|
template
<
class
Y
>
shared_ptr ( const shared_ptr < Y > & r ) noexcept ; |
(9) | |
|
shared_ptr
(
shared_ptr
&&
r
)
noexcept
;
|
(10) | |
|
template
<
class
Y
>
shared_ptr ( shared_ptr < Y > && r ) noexcept ; |
(10) | |
|
template
<
class
Y
>
explicit shared_ptr ( const std:: weak_ptr < Y > & r ) ; |
(11) | |
|
template
<
class
Y
>
shared_ptr ( std:: auto_ptr < Y > && r ) ; |
(12) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( std:: unique_ptr < Y,Deleter > && r ) ; |
(13) | |
Construit un nouveau
shared_ptr
à partir de divers types de pointeurs qui référencent un objet à gérer.
Aux fins de la description ci-dessous, un type pointeur
Y*
est dit compatible avec un type pointeur
T*
si soit
Y*
est convertible en
T*
, soit
Y
est le type tableau
U[N]
et
T
est
U cv []
(où cv est un ensemble de qualifications cv).
shared_ptr
sans objet géré, c'est-à-dire un
shared_ptr
vide.
shared_ptr
avec
ptr
comme pointeur vers l'objet géré. Si
T
est un type tableau
U[N]
,
Y(*)[N]
doit être convertible en
T*
. Si
T
est un type tableau
U[]
,
Y(*)[]
doit être convertible en
T*
. Sinon,
Y*
doit être convertible en
T*
. De plus :
T
n'est pas un type tableau ;
delete
[
]
ptr
si
T
est un type tableau) comme suppresseur.
Y
doit être un type complet. Cette expression delete doit être bien formée, avoir un comportement bien défini et ne lever aucune exception.
Deleter
doit être
CopyConstructible
, et son constructeur de copie et son destructeur ne doivent pas lever d'exceptions.
Alloc
doit être un
Allocator
, et son constructeur de copie et son destructeur ne doivent pas lever d'exceptions.
shared_ptr
qui partage les informations de propriété avec
r
, mais contient un pointeur non lié et non géré
ptr
. Même si ce
shared_ptr
est le dernier du groupe à sortir de la portée, il appellera le destructeur pour l'objet initialement géré par
r
. Cependant, l'appel à
get()
sur celui-ci retournera toujours une copie de
ptr
. Il est de la responsabilité du programmeur de s'assurer que ce
ptr
reste valide tant que ce shared_ptr existe, comme dans les cas d'utilisation typiques où
ptr
est un membre de l'objet géré par
r
ou est un alias (par exemple, downcast) de
r.
get
(
)
.
shared_ptr
qui partage la propriété de l'objet géré par
r
. Si
r
ne gère aucun objet,
*
this
ne gère aucun objet non plus. La surcharge de modèle ne participe pas à la résolution de surcharge si
Y*
n'est pas
compatible avec
T*
.
shared_ptr
à partir de
r
. Après la construction,
*
this
contient une copie de l'état précédent de
r
,
r
est vide. La surcharge du modèle ne participe pas à la résolution de surcharge si
Y*
n'est pas
compatible avec
T*
.
shared_ptr
qui partage la propriété de l'objet géré par
r
.
Y*
doit être
compatible avec
T*
. Notez que
r.
lock
(
)
peut être utilisé dans le même but : la différence est que ce constructeur lance une exception si l'argument est vide, tandis que
weak_ptr
<
T
>
::
lock
(
)
construit un
shared_ptr
vide dans ce cas.
shared_ptr
qui stocke et possède l'objet précédemment détenu par
r
.
Y*
doit être convertible en
T*
. Après la construction,
r
est vide.
shared_ptr
qui gère l'objet actuellement géré par
r
. Le suppresseur associé à
r
est stocké pour la suppression future de l'objet géré.
r
ne gère plus aucun objet après l'appel. Cette surcharge ne participe pas à la résolution de surcharge si
Y*
n'est pas
compatible avec
T*
.
Si
D
est un type référence, équivalent à
shared_ptr
(
r.
release
(
)
,
std::
ref
(
r.
get_deleter
(
)
)
. Sinon, équivalent à
shared_ptr
(
r.
release
(
)
, r.
get_deleter
(
)
)
.
Table des matières |
Notes
Lors de la construction d'un
shared_ptr
à partir d'un pointeur brut vers un objet d'un type dérivé de
std::experimental::enable_shared_from_this
, les constructeurs de
shared_ptr
mettent à jour le membre privé
weak_ptr
de la classe de base
std::experimental::enable_shared_from_this
afin que les appels futurs à
shared_from_this()
partagent la propriété avec le
shared_ptr
créé par ce constructeur à partir d'un pointeur brut.
Les surcharges de pointeur brut prennent la propriété de l'objet pointé, et donc la construction d'un
shared_ptr
en utilisant la surcharge de pointeur brut pour un objet déjà géré par un
shared_ptr
peut conduire à un comportement indéfini, même si l'objet est d'un type dérivé de
std::experimental::enable_shared_from_this
.
Paramètres
| ptr | - | un pointeur vers un objet à gérer |
| d | - | un suppresseur à utiliser pour détruire l'objet |
| alloc | - | un allocateur à utiliser pour les allocations de données à usage interne |
| r | - | un autre pointeur intelligent avec lequel partager la propriété ou dont acquérir la propriété |
Exceptions
T
n'est pas un type tableau,
delete
[
]
ptr
sinon) est appelée si une exception se produit.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
crée un pointeur partagé qui gère un nouvel objet
(modèle de fonction) |
|
|
crée un pointeur partagé qui gère un nouvel objet alloué à l'aide d'un allocateur
(modèle de fonction) |