20行的恥辱
而大米做飯,我想起了一個奇怪的情況發生在我身上,在他的職業生涯的早期,涉及內存管理的C + +。 當時我得多。 年輕,速度更快,更加囂張,更多的新手...
一個更有經驗的同事解釋到另一個經驗不足的同事,為每一個新的,必須有相應的刪除。 否則對象將堅持在內存中,有可能是內存洩漏。
在這一點上,我打斷他說:“不一定,因為它是足夠的,對象的範圍,所以析構函數被自動調用。”
從那時起推出一個論點和反駁的10分鐘的辯論,和整個團隊的駐足圍觀。 一半的球隊在最後,同意和他一起與我的另一半,在這一點上,沒有人在頭腦裡的方式進行檢查,看。 看看在互聯網上是不是一種選擇。
正如我有所有的答案,因為我已經在PHP,Java和C編程+ +是後來證明我是正確的。
以後的日子裡,這些哲學的時刻之一,我記得一個內存地址是一個數字,你可以轉換地址到一個共同的數目,走另一條路,雖然第二個選項通常是毫無意義的。
然後,我想出了一個方法來證明我的理論:它會創建一個對象分配新的禁區範圍。 我會保持為1 1禁區範圍的長出來的共同數量這個對象的地址,期望來完成的限制範圍,在obejto的析構函數被調用和然後外部範圍,將使用對象的地址的數字來訪問該內存區域顯示收到SIGSEGV的試圖訪問無效的內存區域(分割錯誤)。 然後,我生成下面的代碼。
一 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #包括 #包括<string>的 使用命名空間std; int argc, char ** argv ) { INT(INT ARGC的char ** argv的){ 0 ; 無符號長= 0; { new string ( "Hello World!!!" ) ; * STR =新的String(“你好,世界!”); unsigned long ) str ; NUM =(無符號長),STR; "str: " << str << endl ; cout <<“請STR:”<< STR << endl; "num: " << num << endl ; cout <<“請民:”<<一個<< endl; } * ( ( string * ) num ) << endl ; COUT << *((*字符串))<< endl; ; 返回0; } |
看哪,我吃驚的是,方案沒有在我的臉上爆炸。 他曾正確地顯示,其實我是一個人是錯誤的。
尋找更我意識到,應該是每一個新的,只能刪除,並為每個新的[]必須是一個只有一個刪除[]。 什麼,我想我知道內存管理和範圍,它可能是一些不同的語言之間的混淆。
當我開始討論天前,我做了所有的新手犯的基本錯誤:
- 染指的地方,它被稱為。
- 宣誓站在什麼是正確的,沒有任何證據。
- 低估了人的知識,經驗更豐富。
- 我想你知道所有的答案,只是因為你只看到它在課堂上。
- 認為,僅僅因為他們知道幾種語言的基礎知識,使所有的答案。
如任何成員智人的物種,談狗屎。 這一發現,我的反應是整個團隊,我錯了,胡說八道道歉,並顯示這些代碼二十行,我用它來證明這一點。 此外,我表明,我研究了所有來源,甚至提出了有關內存管理的其他細節,我們都喜歡逃避, 循環引用 。 這導致了該項目的某些部分重新德興。
我的20條線cógigo成為“20行的恥辱”,並natualmente我是如此擰。 任何人有任何疑問每次發言:“有20的vegonha線測試。” 類似“的意思是,有一個簡單的測試,不尷尬。”
最重要的是我的後拉屎的態度,深受歡迎,並給球隊帶來了好處。 如果我避開早晚有人會證明我是錯的幕後,前面的每一個人,或者更糟。 承認錯誤,並從中吸取教訓,我準備接受挑戰。 在這支球隊除了表明,我似乎囂張(我喜歡比我更期待...),我知道這是一個普通的人,他犯了一個錯誤,因為任何人,我不認為比任何人都。 這鋪平了道路,為其他團隊成員隨時做同樣的,我們成為一個更具凝聚力的團隊。
評論
- 馬庫斯·安東尼
- http://blabos.org blabos
- junio
- ♣♦♥♠柴姬
- http://blabos.org Blabos的Blebe
- ♣♦♥♠柴姬
- http://blabos.org Blabos的Blebe

