当前位置: 首页 > 工具软件 > delete > 使用案例 >

new delete 详解

空枫涟
2023-12-01

常规的new 和 delete

当需要内存时,可以使用new申请内存,但在用完内存时应当使用delete 去归还内存,以防止内存泄漏,具体使用方案见下面代码:

int* ps = new int ; // 使用new 申明变量空间
...
...
delete ps ; '// delete 删除所申明的变量空间

上述代码将删除ps 指针指向的内存空间,但不会删除指针本身,即仍然可以使用该指针去指向其他int 类型的变量。new 和 delete 一定需要成对的使用否则极易发生内存泄漏。

  • 注意:不要释放已经释放完毕的内存块,C++标准指出,这样做的结果将会不确定。
  • 注意:delete只能释放通过new分配的内存。 例子见下列代码:
int* ps = new int ;
delete ps ; // ok 
delete ps ; // 重复释放 not ok 
int jugs = 5 ;
ps = &jugs ; 
delete ps ; // delete 只能释放由new 分配的内存空间 not ok

使用new 来创建动态数组

使用new 创建数组的方式很简单,即将数组元素的类型和数目告诉new即可,例如:要创建包含10个int元素的数组
 

int* psome = new int [10] ;

指针psome指向数组的第一个元素地址。

当程序使用new 分配变量空间,在变量使用完毕后应当使用delete 去释放该空间

delete [] psome ;

方括号代表删除的内容为数组空间,而不是单个元素空间。

类和对象中的new 和 delete

构造函数创建完对象之后,程序跟踪对象,直到其过期为止。当对象过期时,程序将调用析构函数去完成清理工作。当构造函数中有new 申明的变量时,析构函数要是用delete去清空相应对象,反之当构造函数中没有new申明的变量时,析构函数则不需要做任何其他操作。举个简单的例子:

class string
{
private :
     char* str ; // 准备在构造函数中用new申明空间
public :
     string() {str = new string ;} // 默认构造函数
     ~string() {delete str ;}  // 默认析构函数
}


类和对象new 和 delete

使用动态分配为对象提供空间,需要调用构造函数,当程序不需要该对象的时候,使用delete删除它(此时相当于显示的调用了该对象的析构函数,删除该对象内部动态分配空间的子对象)。

具体程序如下所示:

class Act{...} ;
int main()
{
      Act* pt = new Act ;
      ...
      delete pt ; // 同时隐式的调用了Act中的析构函数,以删除其内部动态分配的子对象。
}

 

 类似资料: