new & delete

发布时间 2023-11-17 22:09:16作者: ichprobiere

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; }
};

申请了内存一定要在不用的时候释放,在学习时的小程序不会有问题,但若是部署在服务器上跑起来就不停的程序,会造成严重的内存泄露。