C ++ std :: unique_ptr retourne de la fonction et teste null
J'ai une fonction qui doit retourner un pointeur vers un objet de la classe myClass
. Pour cela jutilise std::unique_ptr
.
Si la fonction réussit, il doit retourner un pointeur vers un objet avec les données. Si il échoue, il doit retourner null
.
C'est mon code skelepton:
std::unique_ptr<myClass> getData()
{
if (dataExists)
... create a new myClass object, populate and return it ...
//No data found
return std::unique_ptr<myClass> (null); <--- Possible ?
}
sur main
:
main()
{
std::unique_ptr<myClass> returnedData;
returnedData = getData();
if (returnedData != null) <-- How to test for null ?
{
cout << "No data returned." << endl;
return 0;
}
//Process data
}
Donc voilà mes questions:
un) Est que (de retour d'un objet ou d' null
) possible, pour être fait à l'aide de std::unique_ptr
?
b) Si possible, comment mettre en œuvre ?
c) Si pas possible, quelles sont les alternatives ?
Merci pour votre aide.
source d'informationauteur Mendes | 2015-05-17
Vous devez vous connecter pour publier un commentaire.
De la façon suivante devrait fonctionner:
Pour tester si l'objet retourné points d'un objet valide ou non, il suffit d'utiliser:
Voir http://en.cppreference.com/w/cpp/memory/unique_ptr/operator_bool.
Oui c'est possible. Un défaut construit
unique_ptr
est ce que vous voulez:Qui est l'équivalent de la
nullptr_t
constructeur, donc c'est peut-être plus clair:Oui, c'est possible. Un défaut construit
unique_ptr
ou l'on construit à partir denullptr
peut être considérée comme nulle:De tester la valeur null comparez soit contre
nullptr
ou de prendre avantage de la conversion en booléen:Oui, c'est possible.
À partir de la page de référence std::unique_ptr::unique_ptr():
Donc, en gros:
De nullité vérifier, utiliser std::unique_ptr::opérateur booléen - il suffit de l'utiliser comme condition à l'intérieur de
if
déclaration:Comme page de référence pour std::unique_ptr::opérateur booléen dit:
Dans la plus récente de la bibliothèque C++ il devrait y avoir un
make_unique
fonction dans<memory>
nous permet de faireunique_ptr
's aussi facilement que dans le C++11 de la bibliothèque permet avecmake_shared
et partagé des pointeurs.De sorte que vous pourrait permettre d'élucider le code un peu en retournant
std::make_unique(nullptr)
Plus dans la prochaine version de C++, il y aura une "option" type qui permettra d'évaluer comme un
some
valeur ou unnone
valeur. Lenone
valeur ne pourra pas être traitée comme si elle était une valeur valide, contrairement au vide unique_ptr pourrait être traité comme un nullptr. L'option de type représentera encore un autre morceau de Boost entrer dans la bibliothèque standard.