【发布时间】:2020-06-16 15:56:32
【问题描述】:
我了解到在 C++ 中(从 VSCode 0.26.3 下载)虽然内存已经被释放,但指向它的指针不会改变,这意味着它们不会为 NULL。
有什么方法可以让指针为NULL吗?
【问题讨论】:
-
不,没有。
-
使用智能指针。例如。
shared_ptr或unique_ptr,取决于用例。指针将在那里进行内存管理,您可以同时进行这两项操作(例如,通过调用reset())。 -
你的程序逻辑应该“知道”哪些指针持有有效的指针值,哪些没有。为此目的设置一个指向
nullptr的指针。 -
就个人而言,我完全避免使用原始指针——通过使用智能指针或标准容器。如果我必须使用原始指针,而不是在释放它指向的任何内容后将其设置为 NULL,我确保指针本身不再存在 - 例如,由于超出范围,或者(如果它包含在对象中)因为包含对象不再存在。如果您必须将指针设置为 NULL,这意味着您将指针本身保留的时间比需要的时间长。
-
@J.Doe nullptr 检查指针完全没问题。即使您想断言它们的有效性,它们仍然需要为 nullptr 才能可靠地工作。如果有的话,不将释放的指针清空的唯一原因是指针本身即将被销毁或重新分配。