lang:cpp:smartptr
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:cpp:smartptr [2019/10/17 09:19] – [Préserver l'attribut const sur les pointeurs] root | lang:cpp:smartptr [2024/01/11 17:00] (Version actuelle) – Ajout de "Différencier empty et expired" root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====std:: | + | {{ : |
- | Il faut utiliser | + | |
+ | ====Durée de vie==== | ||
+ | |||
+ | Lors d'un '' | ||
<code cpp> | <code cpp> | ||
- | std::map<U, T, std::owner_less<U>> | + | #include < |
+ | #include < | ||
+ | |||
+ | class A { | ||
+ | | ||
+ | A() { std::cout << " | ||
+ | ~A() { std::cout << " | ||
+ | }; | ||
+ | |||
+ | int main() { | ||
+ | std:: | ||
+ | a.reset(new A()); | ||
+ | a = std:: | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Sortie : | ||
+ | |||
+ | < | ||
+ | Constructor | ||
+ | Constructor | ||
+ | Destructor | ||
+ | Constructor | ||
+ | Destructor | ||
+ | Destructor | ||
</ | </ | ||
====Préserver l' | ====Préserver l' | ||
- | Il faut utiliser '' | + | Il faut utiliser '' |
+ | Il existe aussi '' | ||
Soit la classe commune '' | Soit la classe commune '' | ||
Ligne 33: | Ligne 62: | ||
</ | </ | ||
- | ===Cas avec la classe '' | + | * Cas avec la classe '' |
<code cpp> | <code cpp> | ||
Ligne 68: | Ligne 97: | ||
Si la méthode '' | Si la méthode '' | ||
- | ===Cas avec un pointeur | + | * Cas avec un pointeur |
<code cpp> | <code cpp> | ||
Ligne 100: | Ligne 129: | ||
</ | </ | ||
- | On ne respecte | + | On ne respecte l' |
- | ===Cas avec un pointeur unique et propagate_const=== | + | * Cas avec un pointeur unique et propagate_const |
Prérequis : minimum clang 3.9, gcc 6.1. Pas dans Visual Studio 2017 [[https:// | Prérequis : minimum clang 3.9, gcc 6.1. Pas dans Visual Studio 2017 [[https:// | ||
Ligne 118: | Ligne 147: | ||
f (const) | f (const) | ||
g (const) | g (const) | ||
+ | </ | ||
+ | |||
+ | ====Encapsuler fopen/ | ||
+ | |||
+ | <code cpp> | ||
+ | std:: | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ====weak_ptr==== | ||
+ | |||
+ | ====std:: | ||
+ | Il faut utiliser le comparateur '' | ||
+ | <code cpp> | ||
+ | std:: | ||
+ | </ | ||
+ | |||
+ | ===Différencier empty et expired=== | ||
+ | |||
+ | Sans passer par '' | ||
+ | |||
+ | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | class A {}; | ||
+ | |||
+ | int main() { | ||
+ | { | ||
+ | std:: | ||
+ | |||
+ | if (!aa.owner_before(std:: | ||
+ | std::cout << " | ||
+ | } | ||
+ | if (aa.expired()) { | ||
+ | std::cout << " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | { | ||
+ | std:: | ||
+ | std:: | ||
+ | |||
+ | if (!aa.owner_before(std:: | ||
+ | std::cout << " | ||
+ | } | ||
+ | if (aa.expired()) { | ||
+ | std::cout << " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | { | ||
+ | std:: | ||
+ | { | ||
+ | std:: | ||
+ | aa = a; | ||
+ | |||
+ | if (!aa.owner_before(std:: | ||
+ | std::cout << " | ||
+ | } | ||
+ | if (aa.expired()) { | ||
+ | std::cout << " | ||
+ | } | ||
+ | } | ||
+ | if (!aa.owner_before(std:: | ||
+ | std::cout << " | ||
+ | } | ||
+ | if (aa.expired()) { | ||
+ | std::cout << " | ||
+ | } | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
</ | </ |
lang/cpp/smartptr.1571296781.txt.gz · Dernière modification : 2019/10/17 09:19 de root