Bonjour à tous,
voila je m'interroge sur le fonctionne du try catch. Est ce que ca utilise l' appelle systeme sigaction qui permet d'attraper un signal. Si le signal et SIGSEGV alors on saute dans une méthode handler. Puis on retourne à l'instruction suivant apres le try..catch ? Le compilateur C++ gere donc l'implémentation automatique du handler pour attraper le signal sigsegv ?
autre question :
J'ai souvent vu dans certain code assez bien fait (comme Qt) le systeme de property, par exemple,
union type myValue = 6;
myObject.setProperty("myValue", myValue)
et pour récupérer la valeur :
cette facon de faire est un design pattern ? des fois j'ai meme vu le type myValue = void* : myObject::setProperty(char*, void*) ce qui permet de prendre n'importe quel type.
int value = myObject.property("ma variable");
quelqu'un peut il m'expliquer l'utilité d'une telle chose ?
Merci d'avance pour votre aide
# Différent
Posté par Tarnyko (site web personnel) . Évalué à 0. Dernière modification le 09 février 2021 à 12:20.
Les signaux UNIX et exceptions C++ sont deux notions différentes.
Le bloc try/catch te permet de gérer les exceptions C++ runtime sur tous les OS, comme une division par zéro ou un cast invalide.
Cas typique : tu chopes l'élément d'une collection par retour de fonction, tu essaies de le caster dans un type connu, ça pète, tu essaies de le caster dans un autre, etc…
Les signaux UNIX (dont le SIGSEGV correspond aux erreurs de segmentation) sont une notion plus bas niveau, propre à l'OS, et le code sera forcément propre à ces systèmes
(il existe bien un namespace std::signal mais j'ignore comment il se comporte sur d'autres OS).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.