分类: C/C++
2008-04-23 21:40:44
Pointers 与 References(三)
编译:
#include如果指针 px 非 null, 则它指向了一些东西, 但是, 如果指针是 null, 则它没有指向任何东西。当你必须测试指针的状态以确定它是否有值 时, 空指针非常有用。int main() { int x = 12345; int* px = &x; while (px) { cout << "指针 px 指向了某些东西\n"; px = 0; } cout << "指针 px 指向了没有说明的 null!\n"; return 0; }
int n = 10; SOMETYPE *parray, *pS; int *pint; parray = new SOMETYPE[n]; pS = new SOMETYPE; pint = new int;依靠指定一个指针到一个已分配的内存段, 而不是使用变量定义, 你基本上不再是一个 "中间人" (变量定义。现在, 你可以动态分配内存而不必知道你应该定义的变量的数量。如果看看上面的代码片段, 你也可以用 new 操作符来为数组分配内存, 这在我们想维护大的数组或类的大小时处理起来相当方便。因为 new 操作符产生的指针指向的内存也可以被 "释放", 不是 destroyed 而是从你的指针中释放。delete 操作符用在指针的前面并释放指针所指的内存地址:
delete parray; delete pint;由 parray 和 pint 所指向的内存就被释放了, 这在维护大的数组时是件非常好的事, 避免了内存的泄漏。何分配的内存都需要正确地释放否则将会造成内存泄漏而且你的程序将不能有效地运行。基本上, 每次你使用 new 操作符后, 都应该在退出用 delete 操作符来释放内存。但是 delete 操作符, 不仅仅可用于 delete 一个由 new 操作符分配的指针, 也可用于 “delete”一个空指针, 这就防止了删除未分配内存的企图 (这种行为是可以通过编译的)。new 和 delete 操作符不必在相同的函数或代码块中联合使用。通常可以在一个函数中分配内存而在另一个函数中释放内存。(待续)