删除指针是什么意思?

Ash*_*dav 10 c++ pointers memory-management

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

Joh*_*itb 13

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

delete p;
delete[] p; // for arrays
Run Code Online (Sandbox Code Playgroud)

p 在该声明之前分配了

p = new type;
Run Code Online (Sandbox Code Playgroud)

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

free(p);
Run Code Online (Sandbox Code Playgroud)

以前使用malloc或calloc分配的

p = malloc(size);
Run Code Online (Sandbox Code Playgroud)

后者通常被称为"释放",而前者通常被称为"删除".delete用于具有析构函数的类,因为delete除了释放内存之外还将调用析构函数.free(和malloc的,释放calloc等)用于基本类型,但在C++ new和delete也同样可以用于他们,所以没有太多的理由要在C++的malloc,但出于兼容性考虑.

  • @ashish,将指针值更改为null与删除它不同.如果您只将其设置为null,则指针将指向无对象,但之前指向的对象的内存将不会被释放.所以实际上你会通过这样做来泄漏内存.首先删除/释放,然后设置为null(不要让删除的指针保留其旧值 - 它将使您无法在以后测试指针是否指向已分配的内存.这很糟糕). (2认同)

fre*_*low 10

您不能"删除"指针变量

你当然可以 ;-)

int** p = new int*(new int(42));
delete *p;
delete p; // <--- deletes a pointer
Run Code Online (Sandbox Code Playgroud)

但说delete真的,应该真的被称为delete_what_the_following_pointer_points_to.

  • @piyukr不,`delete`在释放内存之前调用析构函数.`free`只是释放内存.对从`new`获得的指针调用`free`会导致未定义的行为. (2认同)