假设我有一个指向MyClass的:删除指针并将指针设置为NULL有什么区别?
MyClass *myPointer = new MyClass();
是什么delete myPointer;
和myPointer = NULL;
之间的区别?
感谢
假设我有一个指向MyClass的:删除指针并将指针设置为NULL有什么区别?
MyClass *myPointer = new MyClass();
是什么delete myPointer;
和myPointer = NULL;
之间的区别?
感谢
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
,这是现代的方式内存管理。
delete myPointer
释放分配的空间,但让您与悬挂指针(指向未分配的东西)。
myPointer = NULL
设置你的指针,用来表示(指着什么)的概念,但给你一个内存泄漏回报为你不取消分配现在是“丢失”的存储器中的值。如果不滥用内存泄漏可能不会太有害,但总是被视为一种编程错误。
您可以用下面的习惯,以防止将来出现问题:
delete myPointer;
myPointer = NULL;
开尔文应该使用的成语是一个智能指针。 – rubenvb
我说过可能...但我不应该,你的建议当然更好。 –
简而言之,删除用于删除存储针对先前使用新关键字分配的对象。对象的析构函数在对象的内存被释放之前调用(如果对象具有析构函数)。
调用delete后,取消引用已释放内存的指针(通常)不具有NULL值,但对它们的任何操作都会导致错误。
将指针设置为NULL意味着它不会取消引用任何内容,但为对象分配的内存仍然存在。
删除删除对象后,有时可能会将指针设置为NULL,以便可以检查它们是否仍然有效(取消引用一致的内存区域)。
不删除/释放分配的内存是内存泄漏 – UnholySheep