为什么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
。但是,假设 y
与 x
不在同一范围内,但其他一些对象持有 y
,那么其他对象 "knows" 就不可能 y
不再是一个有效的指针。
为了避免这个问题和其他问题 smart pointers 已经引入并且应该避免原始指针。
我了解到在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
。但是,假设 y
与 x
不在同一范围内,但其他一些对象持有 y
,那么其他对象 "knows" 就不可能 y
不再是一个有效的指针。
为了避免这个问题和其他问题 smart pointers 已经引入并且应该避免原始指针。