Question

J'ai actuellement quelque chose comme ceci :

QSharedPointer<t> Qsharedfoo;

Maintenant, j'ai un pointeur brut vers foo ainsi appelé rawfoo.Comment puis-je faire en sorte que foo point possède le pointeur brut et commence à le pointer.Je sais que nous pourrions utiliser Boost avec des pointeurs partagés boost::make_sharedcomment pouvons-nous faire avec QSharedPointer ?

Je veux faire quelque chose comme ceci :

Qsharedfoo = rawfoo
Était-ce utile?

La solution

Comment puis-je faire en sorte que foo point possède le pointeur brut et commence à le pointer.Je sais qu'en boost avec des pointeurs partagés, nous pourrions utiliser boost::make_shared, comment pouvons-nous le faire avec QSharedPointer ?

Vous ne pouvez malheureusement pas.

  • Il faudra toujours passer par le constructeur contrairement à make_shared.

  • Ce n’est pas nécessairement une exception sûre.

En résumé, il faudrait passer par le constructeur et opérateur= comme suit:

Qsharedfoo = QSharedPointer<T>(rawfoo); // operator=() overload

ou si vous avez déjà une référence à un pointeur, utilisez le Méthode réinitialiser() comme suit:

Qsharedfoo.reset(rawFoo);

Mais comme mentionné au début, ce ne sont pas des opérations équivalentes à ce que vous recherchez.

Autres conseils

Directement du Documentation Qt, nous avons quelque chose comme ceci :

QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);

En gros, vous pouvez passer votre pointeur de la même manière :

// Here I assume that T is the class you're using for Qsharedfoo.
QSharedPointer<T> Qsharedfoo = QSharedPointer<T>(rawfoo);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top