Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qt objet global

7 septembre 2018 à 21:09:22

Bonjours, je voudrais savoir si il est possible de créer un objet global avec QT ?

EDIT

En effectuant plus de recherche, je suis tombé sur ceci: 

Foo foo;

int main()
{
    foo = Foo(1, 3);
}



https://stackoverflow.com/questions/18823331/can-i-declare-class-object-globally-in-c

-
Edité par Tbalta914 7 septembre 2018 à 21:12:37

  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2018 à 21:46:00

Salut,

De manière générale, les données globales C'EST MAL!!!

Surtout si la donnée en question est modifiable, parce qu'il devient difficile de présumer de son état courant, vu que chaque fonction peut -- potentiellement -- modifier la donnée.

Or, le développeur est comme n'importe quel autre utilisateur : c'est un imbécile distrait.  Il est donc très difficile de lui faire confiance pour utiliser une donnée globale "correctement" (pour tout dire : il vau mieux ne pas espérer qu'il l'utilisera toujours correctement : "attend toi au pire, tu ne sera jamais déçu" :D )

L'un dans l'autre, même en fournissant une interface qui réduise fortement les risque de "mauvaise utilisation" de la classe ne suffira pas forcément à éviter que "n'importe qui" ne décide de la modifier, d'une manière qui soit -- a priori -- "correcte" dans le contexte particulier d'une fonction, mais qui pourrait avoir des répercussions désastreuses dans le contexte des fonctions appelantes.

Enfin, il y a vraiment très peu de situations dans lesquelles il est réellement utile d'avoir accès à une variable globale.

Donc, oui, tu peux créer une variable globale (ne serait-ce que parce que le langage le permet). Mais le fait "d'avoir la permission" de faire quelque chose ne veut absolument pas dire qu'il soit cohérent / utile / nécessaire / intéressant (biffer les mentions inutiles :D ) de le faire.  Et, pire encore : c'est rarement le cas ;)

  • Partager sur Facebook
  • Partager sur Twitter
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
7 septembre 2018 à 22:48:41

Un de mes anciens prof m'a dit, une variable globale, c'est toujours gagnant, 36 fois la mise sur le plan des emmerdements :p  J'ai eu largement le temps de tester et je confirme, à tous les coups on gagne... 36 fois les emmerdements.

C++ permet d'imaginer des mécanismes pour limiter la portée (Singleton, lazy initialization...), qui peuvent réduire les gains (en terme d'emmerdement bien sûr). Mais avant d'aller envisager ces alternatives, il faut être sûr que l'emmerdement potentiel sera très inférieur à celui d'une autre solution. Chaque solution a ses qualités et ses défaut, le bon programmeur est celui qui choisit la meilleure (moins mauvaise) solution au problème qu'il veut résoudre. Mon expérience me dit que variables globales et succédanés de variables globales font rarement partie d'une solution viable et pérenne, parfois un pis aller (vite fait, mal fait, pas le choix, il faut livrer) au prix d'une dette technique souvent non négligeable...

-
Edité par int21h 7 septembre 2018 à 23:27:45

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
7 septembre 2018 à 23:09:59

Un exemple.

A mon taffe, on développe un logiciel. Sur ce logiciel, on a rajouter la possibilité de fermer un projet afin d'en ouvrir un autre.

Méthode : On détruit toutes nos vuex etc et on recommence. (je simplifie le truc). Seulement problème : une variable globale qui n'était pas remise à 0 m'a fait perdre 1 journée de débug. Si la variable n'était pas globale, le bug n'aurait jamais existé !

  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
13 septembre 2018 à 21:34:21

Tbalta914 a écrit:

Bonjours, je voudrais savoir si il est possible de créer un objet global avec QT ?

EDIT

En effectuant plus de recherche, je suis tombé sur ceci: 

Foo foo;

int main()
{
    foo = Foo(1, 3);
}



https://stackoverflow.com/questions/18823331/can-i-declare-class-object-globally-in-c

-
Edité par Tbalta914 7 septembre 2018 à 21:12:37


Tu ose faire ça tu meure :ninja:
  • Partager sur Facebook
  • Partager sur Twitter

Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

13 septembre 2018 à 22:15:32

@EL-jos: je ne serais pas aussi extrême, pour bien comprendre la nocivité des variables globales, peut être faut il les avoir expérimenté soi même... Quoi qu'il en soit, le choix de la variable globale doit être le dernier choix possible car c'est presque toujours le pire (l'idée c'est, tout le reste a foiré, on va envoyer Chuck Norris ^^ ). En plus de 25 ans de c++ je ne me suis jamais retrouvé dans le cas où une globale était le seul choix possible ou le meilleur, voir même le moins mauvais...  La variable globale, c'est un peu comme le côté obscur de la force, plus facile (en apparence), plus rapide (en apparence), mais au final, ce n'est jamais plus facile, ni plus rapide, une variable globale induit tellement de contraintes cachées que ça devient presque toujours une plaie purulente et béante dans le programme ...

-
Edité par int21h 13 septembre 2018 à 22:26:18

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug