Bonjour,

Je viens de me mettre à Boost et aux pointeurs intelligents.
Pour bien comprendre le principe, je le mets en application sur une fonction utilisant mySQL.

Le code d'origine :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include "/opt/mysql/server-5.5/include/mysql.h"
 
using namespace std;
 
main()
{
	MYSQL* ptrSQL = mysql_init(NULL); 
 
       // Ici du code.
 
       mysql_close(ptrSQL);
        return 0;
}
le code avec shared_ptr :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "/opt/mysql/server-5.5/include/mysql.h"
#include "/usr/include/boost/shared_ptr.hpp"
 
using namespace std;
using namespace boost;
 
main()
{
	shared_ptr<MYSQL> ptrSQL;
	ptrSQL.reset(mysql_init(NULL)); 
 
        // Ici du code.
 
        ptrSQL.reset();
}
Quelques questions pour parfaire la compréhension :
  • Est-ce judicieux d'utiliser un shared_ptr dans ce cadre là ? Et si non, pourquoi ?
  • Est-ce que le .reset() remplace mieux, moins bien, ou pareil le mysql_close() ? (Dans les deux cas le,pointeur redevient NULL.)
  • J'aurais eu tendance à laisser le pointeur se supprimer tout seul, est-ce une meilleure solution ?
  • Voyez-vous des erreurs ? L'auriez-vous écrit différemment ?