gpt4 book ai didi

c++ - 为什么C++不能同时释放内存和指针

转载 作者:行者123 更新时间:2023-12-03 09:58:33 25 4
gpt4 key购买 nike

我了解到在C++中(从VSCode 0.26.3下载)虽然内存已经被释放,但指向它的指针不会改变,这意味着它们不会为NULL。

有什么方法可以让指针为NULL吗?

最佳答案

不,没有方法可以自动执行此操作,重要的是要认识到手动将指针设置为 nullptr 不会解决一般问题。要了解原因,请考虑以下简化示例:

int* x = new int(5);
int* y = x;
delete x;
x = nullptr;
if (x) // attempt to check if x still points to an object
std::cout << *x;
if (y) // attempt to check if y still points to an object
std::cout << *y; // !! UNDEFINED BEHAVIOR !!

在调用 delete 之后,通常会看到指针被设置为 nullptr。然而,假设 yx 不在同一范围内,但其他一些对象持有 y,那么其他对象就无法“知道” "y 不再是一个有效的指针。

避免这个问题和其他问题smart pointers已经引入,应避免使用原始指针。

关于c++ - 为什么C++不能同时释放内存和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60521291/

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