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.1704988817.txt.gz · Dernière modification :  de root
                
                