Effective_C++:5、使用相同形式的new和delete

5、使用相同形式的new和delete

1、new和delete

        new和delete是C++用來動態內存申請和釋放的操作符,會調用構造函數和析構函數。在Effective_C++:3、儘量以new和delete取代malloc和free中有介紹。
        new和delete有兩種形式。
        申請的內存中有一個對象時:
string *pstring1 = new string;
...
delete pstring1;
        申請的內存中有多個對象時:
string *pstring1 = new string[100];
...
delete [] pstring1;

        使用new時:首先,進行內存配置,返回其地址;然後,根據new的形式來調用一個或多個構造函數。

        同樣,使用delete時:首先,調用一個或多個析構函數,delete不知道指針指向的是單一對象還是對象數組,所以用delete即爲單一對象,用delete[]即爲對象數組;然後,釋放其內存。

2、爲啥使用相同形式的new和delete

        當使用不同形式的delete和new搭配時,可能會導致調用的析構函數和構造函數次數不一致,出現意料之外的錯誤。

3、使用相同形式的new和delete

        因此,牢記,使用new創建,就使用delete來銷燬;使用new[]來創建,就用delete[]來銷燬。
        特別地,在一個class中多個構造函數包含並初始化同一個指針時,若用到new,請使用相同形式的new,否則,析構函數的delete形式無法確定。
        如下,使用typedef定義一個對象數組,用new來爲數組申請內存,則需要使用delete[]。故最好不要對數組做typedef,同時,也可以使用STL中的string、vector等模板來代替數組。
typedef string sAddressLines[4];
...
string *psal = new sAddressLines;
...
delete [] psal;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章