c++中的delete和delete[]
生活随笔
收集整理的這篇文章主要介紹了
c++中的delete和delete[]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?c++中的delete和delete[]
昨天寫了一篇關于delete和delete[]的文章,有位仁兄指出我的結論是錯誤的,那樣的結果只會在特定的編譯器程序。為了不會誤導大家,文章意見刪除。回家后仔細看了《Effective C++》,是我看書太不仔細了,雖然忘了那位仁兄是誰了,在這里還是謝謝你。現將《Effective C++》中正確的觀點、結論摘錄如下:1. 當你使用new時,有兩件事會發生。第一,內存被配置(透過函數operator new)。第二,會有一個(或以上)的constructors針對此內存被調用。當你使用delete時,也有兩件事發生:一個(或以上)的destructors會針對此內存被調用,然后內存被釋放(透過函數operator delete)。
2. 如果你使用delete是未加括號,delete便假設刪除對象是單一對象。否則便假設刪除對象是個數組。
3. string *stringPtr1 = new string;
string *stringPtr2 = new string[100];
……
delete stringPtr1;
delete [] stringPtr2;
如果你對著stringPtr1使用“[]”形式,其結果未定義。如果你對著stringPtr2沒有使用“[]”形式,其結果亦未定義。猶有進者,這對內建型別如int者亦未定義,即使這類型別并沒有destructors。
4. 因此,游戲規則很簡單,如果你在調用new時使用了[],則你在調用delete時也使用[],如果你在調用new的時候沒有[],那么你也不應該在調用時使用[]。?
轉自:http://www.wangchao.net.cn/bbsdetail_43438.html
轉載于:https://www.cnblogs.com/wintergrass/archive/2011/05/08/2040402.html
總結
以上是生活随笔為你收集整理的c++中的delete和delete[]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BZOJ]1095 Hide捉迷藏(Z
- 下一篇: s3c2440移植MQTT