J'ai un problème. Je dois jeter une exception dans le constructeur un () mais je ne sais pas comment puis-je supposer de l'attraper. Quelqu'un peut-il suggérer quelque chose? J'ai essayé cette méthode: Lancer des exceptions à partir de constructeurs , My Code: P>
3 Réponses :
Placez la définition de la variable à l'intérieur du Essayez CODE> Bloc:
Tout d'abord, ne jetez pas la non exception. 2. Si vous appelez Constructeur à l'intérieur du bloc d'essai, vous pouvez l'attraper alors.
#include <iostream> #include <stdexcept> class One { int a, b; public: One(): a(7), b(0) { if (b == 0) { throw std::runtime_error("except"); } } }; ... try { One j; std::cout << "good" << std::endl; } catch(std::exception& e) { std::cerr << e.what() << std::endl; }
Une autre solution si vous ne voulez pas avoir le code entier à l'intérieur d'un bloc de try..catch: et bien sûr, vous devez un pointeur intelligent dans ce cas: P > int main()
{
std::unique_ptr< One> j;
try
{
j.reset( new One()); // or use std::make_unique<>()
cout << "good";
} catch (const char *str)
{
cout << str;
return 0;
}
// continue with object in j ...
}
Vous devriez mettre
un j; code> dans le bloc code> TRY-CATCH code> pour attraper
une exception code>.
L'opération qui jette l'exception doit aller à l'intérieur du bloc code> code>. C'est vous dire au compilateur ", je vais essayer quelque chose. Voici une liste de mauvaises choses qui pourraient arriver (diverses captures). S'ils se produisent, faire X, Y, Z ..."
@Nutcracker - Quoi? Vous n'avez pas d'autre moyen d'indiquer une défaillance de la construction. La mauvaise idée est de lancer dans un destructeur b>.
@Nutcracker pourquoi mauvaise idée? Si la construction échoue, je ne savais pas comment signaler que sinon une exception.
Oui, j'avais tort. Je pensais destructeurs
@ Storyteller-erlandermonica Il y a d'autres façons, mais tout ce qui me vient à mon esprit est vraiment de mauvaises idées;) (comme à l'aide d'un
isproperlyconstructé code> drapeau)
@ IDCLEV463035818 - Ce n'est pas un moyen, c'est une belette autour d'un mensonge. La construction a couru à l'achèvement, l'objet est effectué. S'il ne peut pas être créé dans un état valide, cela ne devrait pas exister.