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個未被銷毀,造成內存泄漏。


原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/269325.html
微信掃一掃
支付寶掃一掃