删除指针与释放指针(分配内存)相同吗?
答案 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;
当new
和delete
与C ++源代码中的标准C类型一起使用时,它们的行为类似于malloc
和free
。
答案 3 :(得分:1)
您不能“删除”指针变量,只能将其值设置为NULL(或0)。
答案 4 :(得分:1)
是删除指针与释放内存或释放内存等相同。
答案 5 :(得分:0)
是的,它会调用相应的析构函数。
答案 6 :(得分:0)
简而言之,是的。
但是你必须要小心:如果你只使用p = new sometype()
分配,那么你应该使用delete p
。如果使用p = sometype[count]
进行分配,请始终使用delete [] p
还有一件事:你不应该对malloc/delete
或new/free
进行配对。