删除指针并将其设置为nullptr有什么区别?

Acc*_*tor 4 c++ memory pointers heap-memory dangling-pointer

是说delete pointerpointer = nullptr一样吗?可能不是,但后者会释放内存吗?怎么样delete pointer; pointer = nullptr/ pointer = nullptr; delete pointer?为什么不使用它来提供一种安全的方法来过早地删除指针,如果需要,通常会在其他时间删除它们并导致正常删除错误?

fre*_*low 10

pointer = nullptr;就像从名片上取下墨水一样.你不再知道房子的位置,至少不是看那张特定的名片.但房子还在那里.

delete pointer;就像拆毁房子一样.名片仍然告诉你那个房子曾经在哪里,但如果你要去那里(取消引用指针),你会看到房子已经消失了.或者更糟糕的是,他们可能同时在该地址建立核废料储存设施.


Law*_*llo 7

它不一样,因为虽然您可能将指针设置为null,但指针指向的内容仍将占用空间.

delete pointer;
pointer = NULL;
Run Code Online (Sandbox Code Playgroud)

很好,但是

pointer = NULL;
delete pointer;
Run Code Online (Sandbox Code Playgroud)

不是,因为你已经将指针设置为NULL,所以delete命令将没有任何东西可以删除(或者它认为).你现在有一个内存泄漏,因为预先指向的指针(让我们说一个链表)现在漂浮在你的内存中,并且程序无法检查.