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édente | |||
lang:cpp:smartptr [2024/01/11 17:00] – Ajout de "Différencier empty et expired" root | lang:cpp:smartptr [2025/07/06 16:33] (Version actuelle) – [Préserver l'attribut const sur les pointeurs] : déplacement dans un article dédié root | ||
---|---|---|---|
Ligne 33: | Ligne 33: | ||
</ | </ | ||
- | ====Préserver l' | ||
- | Il faut utiliser '' | ||
- | |||
- | Il existe aussi '' | ||
- | |||
- | Soit la classe commune '' | ||
- | |||
- | <code cpp> | ||
- | struct X | ||
- | { | ||
- | void g() const { std::cout << "g (const)\n"; | ||
- | void g() { std::cout << "g (non-const)\n"; | ||
- | }; | ||
- | </ | ||
- | |||
- | et le programme commun : | ||
- | |||
- | <code cpp> | ||
- | int main() | ||
- | { | ||
- | Y y; | ||
- | y.f(); | ||
- | |||
- | const Y cy; | ||
- | cy.f(); | ||
- | } | ||
- | |||
- | </ | ||
- | |||
- | * Cas avec la classe '' | ||
- | |||
- | <code cpp> | ||
- | struct Y | ||
- | { | ||
- | Y() { } | ||
- | |||
- | void f() const | ||
- | { | ||
- | std::cout << "f (const)\n"; | ||
- | m_ptrX.g(); | ||
- | } | ||
- | |||
- | void f() | ||
- | { | ||
- | std::cout << "f (non-const)\n"; | ||
- | m_ptrX.g(); | ||
- | } | ||
- | |||
- | // Ici, X est une instance sans pointeur. | ||
- | X m_ptrX; | ||
- | }; | ||
- | </ | ||
- | |||
- | Rendu sans surprise : | ||
- | |||
- | < | ||
- | f (non-const) | ||
- | g (non-const) | ||
- | f (const) | ||
- | g (const) | ||
- | </ | ||
- | |||
- | Si la méthode '' | ||
- | |||
- | * Cas avec un pointeur intelligent | ||
- | |||
- | <code cpp> | ||
- | struct Y | ||
- | { | ||
- | Y() : m_ptrX{} { } | ||
- | |||
- | void f() const | ||
- | { | ||
- | std::cout << "f (const)\n"; | ||
- | m_ptrX-> | ||
- | } | ||
- | |||
- | void f() | ||
- | { | ||
- | std::cout << "f (non-const)\n"; | ||
- | m_ptrX-> | ||
- | } | ||
- | |||
- | std:: | ||
- | }; | ||
- | </ | ||
- | |||
- | Rendu : | ||
- | |||
- | <code cpp> | ||
- | f (non-const) | ||
- | g (non-const) | ||
- | f (const) | ||
- | g (non-const) | ||
- | </ | ||
- | |||
- | On ne respecte l' | ||
- | |||
- | * Cas avec un pointeur unique et propagate_const | ||
- | |||
- | Prérequis : minimum clang 3.9, gcc 6.1. Pas dans Visual Studio 2017 [[https:// | ||
- | |||
- | <code cpp> | ||
- | #include < | ||
- | std:: | ||
- | </ | ||
- | |||
- | Rendu : | ||
- | |||
- | < | ||
- | f (non-const) | ||
- | g (non-const) | ||
- | f (const) | ||
- | g (const) | ||
- | </ | ||
====Encapsuler fopen/ | ====Encapsuler fopen/ |
lang/cpp/smartptr.txt · Dernière modification : de root