首页 > 解决方案 > 为什么 C++ 不能同时释放内存和指针

问题描述

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

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

标签: c++pointersdma

解决方案


不,没有自动执行此操作的方法,重要的是要意识到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 !!

nullptr在调用 后通常会看到指针被设置为delete. 但是,imagine与其他对象y不在同一个范围内,x但是其他对象y无法“知道”它y不再是有效指针。

为了避免这个问题和其他问题,引入了智能指针,应该避免使用原始指针。


推荐阅读