我们都知道,申请的资源,使用完毕后要释放。但是这个释放动作,一定要注意。
举个例子,很多人动态分配的资源,在使用之后,往往直接调用了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去定义一个数组类型,而是使用标准库提供的容器。