QSharedPointer à partir d'un pointeur brut
-
22-12-2019 - |
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_shared
comment pouvons-nous faire avec QSharedPointer
?
Je veux faire quelque chose comme ceci :
Qsharedfoo = rawfoo
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);