当前位置: 首页 > 图文教程 > 开发语言 > VC++ > Pointers 与 References(三)

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 Pointers 与 References(三)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 48 ::
收藏到网摘: n/a

Pointers 与 References(三)


编译:OneSpace

第一部分

第二部分


16.5 空指针

    还记得可以怎样指定一个字符或串为 null 吗? 如果记不得了, 看看这里吧。串中的 null 字符表示串的结尾, 但是, 如果一个指针被指定到 null 指针, 则它什么也没有指向。空指针常常用 0 或 null 结束。空指针常常用于逻辑操作中的 and/or 条件中
#include <iostream.h> int main() { int x = 12345; int* px = &x; while (px) { cout << "指针 px 指向了某些东西\n"; px = 0; } cout << "指针 px 指向了没有说明的 null!\n"; return 0; } 
   如果指针 px 非 null, 则它指向了一些东西, 但是, 如果指针是 null, 则它没有指向任何东西。当你必须测试指针的状态以确定它是否有值时, 空指针非常有用。

16.6 动态内存分配

    你可能很想知道程序员在运行程序前不知道需要多少内存的情况下, 如何有效地分配内存。这就是动态内存分配的有趣的开始。
    在数章之前, 我们学习了用 "address of" 操作符指定指针, 因为它以指针格式返回变量或常量在内存中的地址。现在, "address of" 操作符已经不是你可用于指定指针的唯一的操作符了。在 C++ 中你还可以用另一个操作符来返回指针, 这就是 new 操作符。new 操作符允许程序
员为特定数据, 结构, 类等分配内存, 并以指针形式返回分配内存的地址。new 操作符作为右值使用, 与 "address of" 操作符类似。看看在以下代码中 new 操作符是如何工作的:
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 操作符不必在相同的函数或代码块中联合使用。通常可以在一个函数中分配内存而在另一个函数中释放内存。(待续)