【发布时间】:2013-10-20 03:02:10
【问题描述】:
在 C++ 中动态分配内存当然可以使用new 或delete 来完成。如果在 C++ 程序过程中不再需要使用new 动态分配的指针,则可以使用delete 来动态释放计算机内存。我认为,如果我没有记错的话,Stroustrep 在他的一本关于 C++ 的书中提到 C 中的 malloc 和 alloc 为编译器而不是程序员提供了“释放”或“创建”内存的选项对比面向对象的“新建”和“删除”。如果我不删除指针,那么我会遇到相当隐蔽的内存泄漏,这不好。
然而,仅仅删除指针——正如 Carrano、Helman 和 Veroff (CHV) 在 Walls and Mirrors 第 2 版中第 151-153 页上的注释——并不能消除指针。相反,delete 会清空指针的内容,但会将指针留在计算机内存空间中的某个位置。
无论如何,CHV 会说在使用 delete 之后必须将指针设置为 NULL 才能摆脱这个“已删除”构造。
在这种情况下,赋值运算符是否被重载以接受 NULL 作为布尔值?换句话说,编译器是否告诉计算机指针应该存在于内存空间中是错误的,这意味着我告诉编译器物理上阻止一堆占据两位空间的电子通过我的计算机运行?我在这里遗漏了什么吗?
【问题讨论】:
-
这么多……混乱……
-
这就像那些巨魔科学论文之一。
-
我的印象是“NULL == 0”将被视为 TRUE,这意味着 NULL 与 FALSE 同义,这意味着指针一旦终止就会变成“布尔”类型的构造这样。我的想法是0“关闭”电子门,而“1”表示门打开。我弄错了吗?
标签: c++ pointers memory memory-leaks