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

why C++ can't free memory and pointer simultaneously

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

有什么方法可以让指针为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,那么其他对象 "knows" 就不可能 y不再是一个有效的指针。

为了避免这个问题和其他问题 smart pointers 已经引入并且应该避免原始指针。