new出来的空间如果没有主动销毁,在程序退出时仍可能有内存的泄露。
操作系统描述到,在进程退出时会销毁它所使用的所有内存空间,但这只是
一个模型上的构想和描述。在实际的操作系统的实现上并不能做到这一点。
因为,要实现在进程退出时销毁它所使用的内存空间,就要给每个被使用的
内存空间打一个标,表示这段内存空间被那个进程使用。在这种情况下,如
果有多个使用小内存量的进程,并且被频繁的创建和销毁,那么光记住那些
进程标致就要占用很大的内存空间,这是一个很不划算的方案。所以在实际
中,操作系统并没有给每个进程使用的内存空间打标。这样,有些小内存是
没有被回收的,如果多次开关这个程序就会发现,有内存被大量的占用,而
不能被释放。
所以那些在程序中只有一个实例,并且是被new出来的对象,也应该主动
的去手动销毁,而不能依赖程序退出时由系统销毁。
被new出来的对象其销毁是两个步骤。
1 析构对象。条用对象的析构函数,将对象占用的资源释放掉。
2 释放内存。将对象所占用的内存释放掉。
如果new出来的对象没有被销毁,会造成连个层面上的泄露。
1 对象泄露。他会造成背对象占用的资源也没有销毁或释放。比如在对象
中占有文件的句柄,在析构时才释放。如果对象泄露了,这个句柄是不会被释
放的。那个文件会一直被占用。如果文件打开时是独占的,那么及时对象所在
的程序退出了,别的程序也别想访问这个文件。
2 内存泄露。所占用的内存不能被释放。
posted on 2007-05-31 10:50
walkspeed 阅读(2682)
评论(5) 编辑 收藏 引用 所属分类:
C++语言