繁体   English   中英

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

[英]why C++ can't free memory and pointer simultaneously

我了解到在 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不再是有效指针是不可能的。

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

如果您使用的是原始指针,那么每当您释放内存时,都将指针显式分配给 NULL。 原始指针没有自动方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM