删除指针是什么意思?

时间:2010-03-15 18:10:12

标签: c++ pointers memory-management

删除指针与释放指针(分配内存)相同吗?

7 个答案:

答案 0 :(得分:13)

删除指针(或删除指向的指针,或者)意味着

delete p;
delete[] p; // for arrays

p在该声明之前分配,如

p = new type;

它也可以指使用其他动态内存管理方式,如free

free(p);

以前使用malloc或calloc

分配
p = malloc(size);

后者通常被称为“释放”,而前者通常被称为“删除”。 delete用于具有析构函数的类,因为delete除了释放内存之外还会调用析构函数。 free(和malloc,calloc等)用于基本类型,但在C ++中new和delete同样可以用于它们,因此除了兼容性原因之外没有太多理由在C ++中使用malloc。

答案 1 :(得分:10)

  

您无法“删除”指针变量

当然可以; - )

int** p = new int*(new int(42));
delete *p;
delete p; // <--- deletes a pointer

但严重的是,delete应该被称为delete_what_the_following_pointer_points_to

答案 2 :(得分:2)

是的,delete用于释放内存并为相关对象调用析构函数。

在删除它之后设置指针NULL以避免指向无效指针是常见的做法:

Object *o = new Object();

// use object
delete o; // call o->~Object(), then releases memory
o = NULL;

newdelete与C ++源代码中的标准C类型一起使用时,它们的行为类似于mallocfree

答案 3 :(得分:1)

您不能“删除”指针变量,只能将其值设置为NULL(或0)。

答案 4 :(得分:1)

是删除指针与释放内存或释放内存等相同。

答案 5 :(得分:0)

是的,它会调用相应的析构函数。

答案 6 :(得分:0)

简而言之,是的。

但是你必须要小心:如果你只使用p = new sometype()分配,那么你应该使用delete p。如果使用p = sometype[count]进行分配,请始终使用delete [] p

还有一件事:你不应该对malloc/deletenew/free进行配对。