Les 20 lignes de la honte
Alors que le riz cuit, je me suis souvenu d'un cas curieux de ce qui m'est arrivé au début de sa carrière, impliquant la gestion de la mémoire en C + +. A cette époque, j'étais beaucoup plus. Débutant Jeune, plus rapide, plus arrogant et plus ...
Un plus expérimentés collègue était d'expliquer à un autre collègue moins expérimenté que pour chaque nouvelle il doit y avoir une suppression correspondante. Sinon, l'objet sera persistent dans la mémoire et il peut y avoir des fuites de mémoire.
A ce stade, je l'ai interrompu et a dit "non pas nécessairement parce qu'il suffit que l'objet hors de portée pour le destructeur est appelé automatiquement .."
Depuis roulé un débat min 10 avec des arguments et des contre-arguments, et toute l'équipe reste à regarder. En fin de compte, la moitié de l'équipe d'accord avec lui et l'autre moitié avec moi, et à ce moment, personne n'avait à l'esprit un moyen de vérifier. Rechercher sur Internet n'était pas une option.
Comme j'ai eu toutes les réponses, après tout déjà programmé en PHP, Java et C + + était de montrer plus tard que j'avais raison.
Quelques jours plus tard, un de ces moments philosophiques, je me souvenais que d'une adresse mémoire est un numéro, et vous pouvez soit convertir une adresse à un numéro commun, et aller dans l'autre, bien que ce dernier est généralement inutile.
Puis j'ai imaginé un moyen de prouver ma théorie: Il serait de créer un objet dans un champ limité à l'affectation de nouvelles. Enregistrer l'adresse de cet objet comme un numéro commun dans un hors temps de la portée limitée, attendez-vous pour finaliser la portée limitée, le destructeur de obejto être appelé et puis le champ extérieur, utiliser le nombre qui représente l'adresse de l'objet pour accéder à ce domaine de la mémoire montrant que recevoir un SIGSEGV (segmentation fault) en essayant d'accéder à une zone mémoire invalide. Ensuite, j'ai généré le code ci-dessous.
Une 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Inclure # Include <string> using namespace std; int argc, char ** argv ) { int main (int argc, char ** argv) { 0 ; unsigned long a = 0; { new string ( "Hello World!!!" ) ; * Str = new String ("Bonjour le monde!"); unsigned long ) str ; a = (unsigned long) str; "str: " << str << endl ; cout <<"str:" <<str <<endl; "num: " << num << endl ; cout <<"num:" <<a <<endl; } * ( ( string * ) num ) << endl ; cout <<* ((* string) a) <<endl; ; return 0; } |
Voici, à ma grande surprise le programme n'a pas explosé au visage. Il fonctionnait correctement en soulignant que, en fait j'ai été celui qui avait tort.
Recherche plus je réalisais que oui, il doit être nouveau pour chacun d'eux et que les supprimer, et plus pour chaque nouveau [] doit être une et une seule delete []. Qu'est-ce que je pensais que je savais sur la gestion mémoire et de la portée, il était probablement une certaine confusion entre les différentes langues.
Quand j'ai commencé la journée de discussion, avant, j'ai fait toutes les erreurs de base qui engage un débutant:
- Meddle où il a été appelé.
- Assermentation debout ce qui est juste sans preuve.
- Sous-estimer la connaissance de quelqu'un de plus expérimenté.
- Pensez-vous avoir toutes les réponses juste parce qu'ils viennent le voir en classe.
- Pour penser que juste parce qu'ils connaissent les rudiments de plusieurs langues, alors vous avez toutes les réponses.
Comme tout bon membre de l'espèce Homo sapiens , a parlé merde. Ma réaction à cette découverte a été de prendre toute l'équipe et je me suis trompé, excuses pour parler non-sens et montrent que ces vingt lignes de code utilisé pour le démontrer. Par ailleurs, je l'ai montré de toutes les sources que j'ai vérifié, et même fait sortir d'autres détails sur la gestion de la mémoire que nous fuyaient, comme les références circulaires . Cela a conduit à une ré-desing de certaines parties du projet.
Mes 20 lignes cógigo devint connu comme «Les 20 lignes de la honte" et donc j'ai été natual vissé. Chaque fois que quelqu'un avait des doutes parlé "il ya 20 lignes de vegonha pour les tests." Le sens était quelque chose comme «il ya un test simple pour ne pas être gêné plus tard."
La chose la plus importante est que mon post-chier attitude a été bien reçu et apporté des avantages à l'équipe. Si j'avais eu peur, tôt ou tard, quelqu'un serait prouver que je n'allait pas devant tout le monde, ou pire, dans les coulisses. Admettre leurs erreurs et apprendre de lui montré que j'étais prêt à être contestée. En plus de cette équipe a montré que plus je semble arrogant (je ressemble plus que je suis ...), je savais qu'il était un homme ordinaire qui a fait des erreurs comme tout le monde, je ne pense pas plus que quiconque. Cela a ouvert la voie à d'autres membres de l'équipe, n'hésitez pas à faire la même chose et nous devenons une équipe plus cohésive.
Commentaires
- Marcus Antonius
- http://blabos.org bavarder
- Junio
- ♣ ♦ ♥ ♠ Hime Cheshire
- Blaber http://blabos.org des bleb
- ♣ ♦ ♥ ♠ Hime Cheshire
- Blaber http://blabos.org des bleb

