gpt4 book ai didi

c++ - C++ 中的 delete vs NULL vs free

转载 作者:IT老高 更新时间:2023-10-28 12:32:45 25 4
gpt4 key购买 nike

删除指针、将其设置为 null 和释放它有什么区别。

delete ptr;

对比

ptr=NULL;

对比

free(ptr);

最佳答案

您的问题表明您来自具有垃圾收集功能的语言。 C++ 没有垃圾回收。

如果将指针设置为 NULL,这不会导致内存返回可用内存池。如果没有其他指针指向这个内存块,那么您现在只是有一个“孤立”的内存块,它仍然分配但现在无法访问——泄漏。泄漏只会在程序累积到无法分配内存的程度时才会导致程序崩溃。

还有相反的情况,你 delete使用指针的内存块,然后尝试访问该内存,就好像它仍然被分配一样。这是可能的,因为调用 delete on a pointer 不会将指针设置为 NULL - 它仍然指向先前分配的内存地址。指向不再分配的内存的指针称为悬空指针,访问它通常会导致奇怪的程序行为和崩溃,因为它的内容可能不是你所期望的——那 block 内存可能有之后被重新分配用于其他目的。

[编辑] 正如 stinky472 提到的,delete 之间的另一个区别和 free()是只有前者调用了对象的析构函数。 (请记住,您必须在使用 delete 分配的对象上调用 new,而对于使用 free() 分配的内存,必须调用 malloc() ——它们不能混合使用。)在 C++ 中,如果出现以下情况,最好使用静态分配可能,但如果不是,那么更喜欢 newmalloc() .

关于c++ - C++ 中的 delete vs NULL vs free,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com