Que sont les pointeurs intelligents (smart pointers) et quand faut-il les utiliser ?
Bonjour, collègues ! Je programme en C++ depuis peu, mais j'ai déjà rencontré le problème des fuites mémoire. Pour l'instant, j'utilise des pointeurs « bruts » (raw pointers) classiques avec `new` et `delete`, mais j'oublie constamment d'appeler `delete`, surtout quand le code se complique avec des exceptions et des retours anticipés. Par exemple :
```cpp
void process() {
Resource* res = new Resource();
// ... du code qui peut lever une exception ...
delete res; // si une exception survient, on n'arrive pas ici — fuite !
}
```
J'ai entendu parler des « pointeurs intelligents » (smart pointers) en C++11, mais je ne comprends pas encore bien ce que c'est. Il y a beaucoup d'informations sur Internet, mais j'aimerais une explication claire : qu'est-ce que c'est, en quoi diffèrent-ils des pointeurs ordinaires, et dans quelles situations faut-il vraiment les utiliser ? Je m'intéresse particulièrement à `std::unique_ptr`, `std::s