c++ - 为什么 C++ 不能同时释放内存和指针
问题描述
我了解到,在 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 !!
nullptr
在调用 后通常会看到指针被设置为delete
. 但是,imagine与其他对象y
不在同一个范围内,x
但是其他对象y
无法“知道”它y
不再是有效指针。
为了避免这个问题和其他问题,引入了智能指针,应该避免使用原始指针。
推荐阅读
- python - 我是 Python 中 OOP 的初学者,并且在我的代码中得到“没有足够的值来解包”
- javascript - 1 >= 2 吗?console.log("123"): null; 造成内存泄漏?
- ios - Swift:如何停止公开委托方法
- vue.js - 如何使用 VueJs 插件 vue-lazyload
- python - 为什么其他窗口(GUI)没有打开,而其他窗口(GUI)在 Python 中运行?
- java - 在 Spring Boot 中使用自定义代码进行响应
- vba - Selenium VBA - 以无头模式下载文件
- excel - Range.Find 方法编译错误与“什么”值
- laravel - 提前培训和预约
- powerbi - DAX VAR 在度量代码中间定义命名变量