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