new与delete分别相当于C中的malloc()和free()
在new对象时,其不仅要分配空间,还要调用其构造函数
-
new 的调用顺序为:分配空间->析构
-
delete 的调用顺序为:析构->回收空间
其中,delete有两种写法:
- delete p;
- delete[] p;
new的时候有[]
,则delete时也应该有[],若未使用delete[],则只回收array的空间而不会调用array成员的析构。
delete空指针不会有影响,留着这个口子可以让代码更好些,就不用写成:
if ( p )
delete p;
因为有些类不一定会new出东西来,如下面这个,必须在调用了f函数后,才会有需要delete的东西:
class A
{
private:
int i;
int *p;
public:
A(){
i = 0;
p = 0;
cout << "A::A()" << endl;
}
~A(){
if( p )
delete p;
cout << "A::~A()" << i << endl;
}
void set( int i ){ this->i = i; }
void f(){ p = new int; }
};
申请了内存一定要在不用的时候释放,在学习时的小程序不会有问题,但若是部署在服务器上跑起来就不停的程序,会造成严重的内存泄露。
标签:调用,int,析构,new,array,delete From: https://www.cnblogs.com/3-141592653589/p/17839776.html