C++在回收用 new 分配的單個對象的內存空間時,直接用 delete;回收用 new[] 分配的數組對象的內存空間時,需要用 delete[]。
- 調用 new 所包含的動作:從系統中申請一塊內存,并調用對象的構造函數;
- 調用 delete 所包含的動作:先調用對象的析構函數,然后將內存歸還系統;
- 調用 new[n] 所包含的動作:申請可容納 n 個對象的空間,并調用 n 次構造函數來初始化這 n 個對象;
- 調用 delete[] 所包含的動作:先調用 n 次對象的析構函數,再將內存歸還系統。
比如下面這段代碼:
#include <iostream>
using namespace std;
class Student {
public:
Student() {
cout << "1. Constructor" << endl;
}
~Student() {
cout << "2. Destructor" << endl;
}
};
int main()
{
Student* stu = new Student();
delete stu;
stu = nullptr;
cout << "---" << endl;
Student* stuArr = new Student[2];
delete[] stuArr; // 不要漏了[]
stuArr = nullptr;
return 0;
}
運行結果為:


需要注意的是:若將 delete[] stuArr 改為 delete stuArr,則會導致 stuArr 指向的2個Student對象中的剩余1個未被銷毀,造成內存泄漏。




版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。
發表評論
請登錄后評論...
登錄后才能評論