程序运行过程中栈和堆的概念,栈是程序运行过程中,程序为局部变量分配的内存,如int a = 2,可以实现自行销毁;堆是程序员控制分配的内存 int *p = malloc(int),必须由程序员进行控制销毁。
资源管理相关概念:
栈上分配的对象,生命周期结束时,会由编译器自动执行释放操作。
当一个对象内部嵌入另一个自动对象,调用外部对象的析构函数时,会自动调用内部的析构函数。
堆上分配的对象,由程序员控制其内存释放,如果未执行释放,易导致内存泄漏。操作系统可能执行响应的内训释放操作。
动态分配的对象,由指针进行控制,但是多个指针可能指向同一个对象,比如int *p= new int, *p1=p,*p2=p;此时如果冒然删除p,则可能导致p1,p2成为空悬指针,此时使用这种指针,进会出现运行为错误。
动态对象管理不当,可能引起内存泄漏,空悬指针,重复删除等错误。
一个对象可以拥有资源,在对象的构造函数中执行资源的获取(指针的初始化),在析构函数中释放。这种技法把它称之为RAII(Resource Acquisition Is Initialization)
原文:http://www.cnblogs.com/mingdimowang-lyw/p/6658251.html