Les 20 lignes de la honte
Pendant que le riz va cuire, 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. Jeune, plus rapide et plus arrogant newbie ...
Un collègue plus expérimenté expliquait à un autre collègue moins connu que pour chaque nouvelle il devrait y avoir une suppression correspondante. Sinon, l'objet va persister dans la mémoire des fuites de mémoire peut se produire.
À ce moment j'ai interrompu et a dit «pas nécessairement parce que l'objet tout simplement laisser une marge pour le destructeur est appelé automatiquement .."
Depuis lors, un débat laminés 10 min avec des arguments et des contre-arguments, et toute l'équipe cessé de regarder. En fin de compte, la moitié de l'équipe d'accord avec lui et l'autre moitié avec moi, et à cette époque, personne n'avait à l'esprit un moyen de vérifier. Rechercher sur l'Internet n'était pas une option.
Comme j'ai eu toutes les réponses, parce que j'ai déjà programmé en PHP, Java et C + + était de démontrer plus tard que j'avais raison.
Quelques jours plus tard, un de ces moments philosophiques, je me suis souvenu qu'une adresse mémoire est un nombre, et qui peut aussi bien convertir une adresse un numéro commun, tout comme dans l'autre sens, bien que la seconde option est généralement inutile.
Ensuite, j'ai trouvé un moyen de prouver ma théorie: Il serait de créer un objet avec une portée limitée par l'attribution de nouvelles. Souhaitez-garder l'adresse de cet objet comme un numéro commun dans un des longs d'une portée limitée, restreinte s'attendent à finaliser la portée, le destructeur est appelé les reliques culturelles et le champ d'application externe, elle utilise le nombre représentant l'adresse de l'objet pour accéder à cette zone de mémoire montrant qu'il recevrait un SIGSEGV (segmentation fault) en tentant d'accéder à une zone mémoire non valide. Ensuite, j'ai généré le code ci-dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Include <iostream> # Include <string> using namespace std; int argc, char ** argv ) { int main (int argc, char ** argv) ( 0 ; unsigned long num = 0; ( new string ( "Hello World!!!" ) ; * string str = new String ("Bonjour tout le monde!"); unsigned long ) str ; num = (unsigned long) str; "str: " << str << endl ; cout <<"str:" <<str <<endl; "num: " << num << endl ; cout <<"nombre:" <<nombre <<endl; ) * ( ( string * ) num ) << endl ; cout <<* ((string *) num) <endl <; ; return 0; ) |
Voici, à ma grande surprise le programme pas explosé au visage. Il a fonctionné correctement montrant que, en fait c'était moi qui avait tort.
Chercher plus loin, je trouve que oui, il doit être nouveau pour tout le monde et que les supprimer, et plus pour chaque [nouveau] doit être une et une seule delete []. Ce que je pensais que je savais de gestion de la mémoire et les champs, il était probablement une certaine confusion entre les différentes langues.
Quand j'ai commencé les jours de discussion avant, j'ai fait toutes les erreurs de base qui commet un débutant:
- Meddle où elle n'a pas été appelé.
- permanent de jurer par ce qui est juste sans aucune preuve.
- Sous-estimer la connaissance de quelqu'un de plus expérimenté.
- Pensez-vous avoir toutes les réponses juste parce que vous venez de le voir en classe.
- Quand je pense 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é de la merde. Ma réaction à cette découverte a été de prendre toute l'équipe et je me suis trompé, s'excuse d'avoir gaffé et montrer à ces vingt lignes de code que j'ai utilisé pour le prouver. En outre, j'ai montré toutes les sources que j'ai étudié, et a également évoqué d'autres détails sur la gestion de la mémoire que nous échappaient, comme des références circulaires . Cela a conduit à une ré-desing certaines parties du projet.
Mes 20 cógigo lignes est devenu connu sous le nom "Les 20 lignes de la honte» et natual j'étais défoncée par la présente. Chaque fois que quelqu'un avait le moindre doute parlé "il ya les 20 lignes de vegonha à tester." Le sens est plus ou moins comme "est-il un test simple de ne pas me gêner plus tard."
La chose la plus importante est que mon attitude post-shit a été bien reçu et apporté des avantages à l'équipe. Si je devais me fuyait, tôt ou tard, quelqu'un prouver que j'avais tort devant tout le monde, ou pire, dans les coulisses. Admettre les erreurs et en tirer des leçons ont montré que j'étais prêt à être contestée. En plus de cette équipe a montré que plus il me semblait arrogant (il me semble plus que je suis ...) Je savais que c'était un homme ordinaire, il fait une erreur que personne, je ne crois 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 solidaire.


