Rappel : les "smarts pointeurs" sont des objets c++ alloués sur la pile du thread courant qui gère le cycle de vie d'un objet alloué sur le tas (ou heap).
On peut citer le :
- QPointer destiné à pointer des objets en relation "1 to 1" (sans compteur de référence)
- QSharedPointer destiné à partager son pointage avec d'autres smart pointeurs (relation 1 to n).
Avec Qt pour votre classe puisse être "smart pointable" (désolé), il vous faut la faire dériver de QObject la classe mère de l'architecture Qt.
Exemple de source :
// Seule une classe héritant de QObject
// peut être pointée par le QPointer
class X : public QObject {
private:
int _i;
public:
X(int ii) : _i(ii) {}
operator int() { return _i; }
virtual ~X() {}
};
Dans ce cas voici un petit exemple improvisé d'utilisation des smart pointeurs de la librairie.
int main(int argc, char *argv[]){
QCoreApplication a(argc, argv);
// Smart pointer vers un objet (relation 1 to 1)QPointer<X> sp( new X(1) );QPointer<X> sp2( new X(2) );qDebug() << "sp._i = " << sp->operator int();qDebug() << "sp2._i = " << sp2->operator int();sp = sp2; // les 2 smart pointers pointent vers le même objetqDebug() << "sp._i = " << sp->operator int();qDebug() << "sp2._i = " << sp2->operator int();// Smart pointeurs avec un compteur de référenceQSharedPointer<X> sp3( new X(3) );QSharedPointer<X> sp4( sp3 );qDebug() << "sp3._i = " << sp3->operator int();qDebug() << "sp4._i = " << sp4->operator int();qDebug() << "FIN";return a.exec();}
Après avoir fait quelques petits tests de performance les smarts pointers proposés par boost sont plus performants (cpu).
Aucun commentaire:
Enregistrer un commentaire