QSharedPointer, comment passer autour, et ai-je besoin?

Été à essayer de comprendre pointeur partagé depuis quelques jours maintenant et il se sent comme je ne peux pas sembler obtenir. Vous ne savez pas si c'est juste pour évidente ou si c'est trop compliqué. Tout d'abord, quelqu'un pourrait-il me donner un exemple où vous auriez FAIT une utilisation partagée des pointeurs. Les exemples sur Wikipédia ne fait pas de sens pour moi. Et comment voulez-vous passer un pointeur partagé à une autre fonction ou de créer un objet avec un pointeur partagé. Alors, comment voulez-vous de les passer et où l'utiliser? AUCUNE des informations ou des exemples serait génial.

Aussi, j'ai ce problème lorsque je ne sais pas quoi utiliser. J'ai cette fonction où j'alloue un QFile et passe à une fonction dans une autre classe. Cette fonction prend le fichier en tant que QIODevice* et crée ensuite un objet contenant le fichier. Je me demandais ce que la meilleure solution serait ici et comment (si je doit) utiliser un pointeur partagé ici? Comment puis-je faire un pointeur partagé avec <QFile> et le passer dans la où la fonction prend <QIODevice>. Se sent comme je n'ai pas partagé les pointeurs à tous...

Mon autre approche serait de se poser la répartition de la QFile dans un QScopedPointer. J'ai ensuite passer à la classe et lors de la création de l'objet sur lequel le fichier sera stocké, j'utilise QPointer ou QScopedPointer. À la fin de la première fonction d'appel que je devrais l'appeler() à droite?

function () {
   QScopedPointer<QFile> item(new QFile("filename"));
   SomeClassObject->doStuff(item.data());
   item.take();
}
---------------------------------
SomeClass::doStuff(QIODevice *item) {
    _currentObject = new MyObject(item); //should _currentObject be a smartpointer?
    ...
}
---------------------------------
class MyObject {
    QPointer<QIODevice> _item;

    ...
    MyObject(QIODevice *item) {  _item = item; }
}

J'ai donc besoin d'un moyen pour stocker des pointeurs et une façon de les gérer lors de la création de la "nouvelle" déclenche une exception.

OriginalL'auteur chikuba | 2012-03-23