我們都知道,申請的資源,使用完畢後要釋放。但是這個釋放動作,一定要註意。 舉個例子,很多人動態分配的資源,在使用之後,往往直接調用了delete,而不管申請資源的時候用的是new還是new[]。 如下: #include using namespace std; int main(){ int *p... ...
我們都知道,申請的資源,使用完畢後要釋放。但是這個釋放動作,一定要註意。
舉個例子,很多人動態分配的資源,在使用之後,往往直接調用了delete,而不管申請資源的時候用的是new還是new[]。
如下:
#include <iostream>
using namespace std;
int main(){
int *p;
p=new int[256];
//某些操作
delete p; //錯誤,和分配資源時的操作不匹配
}
但是有時候,我們感覺寫的代碼是沒有問題的,然而卻犯了一些很隱晦的錯誤。比如以下代碼:
#include <iostream>
using namespace std;
int main(){
typedef int MyArray[256];
MyArray *p=new MyArray;
//一些操作
delete p; //錯誤,此時應該使用delete[]
}
當我們使用typedef的時候,往往無法看清楚,原有的類型是什麼。
不過這個情況也很好避免,在c++中,我們合理的使用vector,string等容器,幾乎就可以避免數組的使用。而且儘量不要用typedef去定義一個數組類型。
忠告:
- 成對地使用new和delete
- 不要用typedef去定義一個數組類型,而是使用標準庫提供的容器。