2016-11-30 88 views

回答

8

delete myPointer去分配内存,但留下myPointer变量的值,它是指向一些垃圾地址。

myPointer = NULL只设置myPointer的值设置为NULL指针,可能泄漏的内存,如果你不删除其他指针,它指向相同的地址myPointer

在你应该使用这两个字符串理想世界中,像这样的:

delete myPointer; // free memory 
myPointer = nullptr; // setting value to zero, signalizing, that this is empty pointer 

但总体而言,使用std::unique_ptr,这是现代的方式内存管理。

2

delete myPointer释放分配的空间,但让您与悬挂指针(指向未分配的东西)。

myPointer = NULL设置你的指针,用来表示(指着什么)的概念,但给你一个内存泄漏回报为你不取消分配现在是“丢失”的存储器中的值。如果不滥用内存泄漏可能不会太有害,但总是被视为一种编程错误。

您可以用下面的习惯,以防止将来出现问题:

delete myPointer; 
myPointer = NULL; 
+0

开尔文应该使用的成语是一个智能指针。 – rubenvb

+0

我说过可能...但我不应该,你的建议当然更好。 –

1

简而言之,删除用于删除存储针对先前使用关键字分配的对象。对象的析构函数在对象的内存被释放之前调用(如果对象具有析构函数)。

调用delete后,取消引用已释放内存的指针(通常)不具有NULL值,但对它们的任何操作都会导致错误。

将指针设置为NULL意味着它不会取消引用任何内容,但为对象分配的内存仍然存在。

删除删除对象后,有时可能会将指针设置为NULL,以便可以检查它们是否仍然有效(取消引用一致的内存区域)。