您好、欢迎来到现金彩票网!
当前位置:老k棋牌 > 栈区 >

c++中析构函数析构堆中对象和栈中对象有什么区别?

发布时间:2019-07-12 23:45 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

  2、堆区(heap) — 般由程序员分配释放, 采用谁分配谁释放的策略。

  1,对于栈区的变量如string 类,你定义后,应该程序退出的时候,由程序负责进行对string执行析构操作。

  2,对于你申请的指针或动态的数组,如new char a[10]; 即出的时候,你要自己delete []a;才能保证内存没有泄漏。

  展开全部1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

  2、堆区(heap) — 般由程序员分配释放, 采用谁分配谁释放的策略。

  1,对于栈区的变量如string 类,你定义后,应该程序退出的时候,由程序负责进行对string执行析构操作。

  2,对于你申请的指针或动态的数组,如new char a[10]; 即出的时候,你要自己delete []a;才能保证内存没有泄漏。

  展开全部栈区:储存了程序作用域内的各种数据,它也相当于编译器为我们创造的一个拥有固定大小的向系统申请的内存,但是我们不需要对其进行释放,因为程序结束自动释放(我们只有改变其内部数据结构的权利。),而栈中的数据通过构造器和析构函数进行内存的调配,当析构函数进行操作的时候,相当于栈区的一块内存被原始化,返还给栈区这个内存,这和系统调配内存有相似处。

  堆区:堆区的内存由程序员进行管理,它通过向系统申请内存,得到一块内存,但是内存的使用由程序员负责,它可以用构造器进行构造一个数据结构储存在这个内存块中,也可以用析构函数将被构造的数据进行摧毁操作,但是即使这个数据被摧毁,对内存没有影响,只用用delete将内存还给系统,才是彻底将内存进行摧毁。

  系统内存:系统拥有分发给堆区和栈区内存的权利,栈区是编译器向系统申请的内存,它由编译器进行申请和释放,而堆区是由程序运行中向系统申请的内存,它由程序进行申请和释放。

  内存相当于砖头,即使用砖头搭建(构造)了任何建筑,或者摧毁(析构)了任何建筑,只要砖头没有少,就对内存没有影响,但是我们如果释放了少于系统分配的内存,因为程序也没有任何可以使用那部分内存的方法,系统也失去了那部分内存的使用权利,那么系统没有得到的那一部分内存就是内存泄漏。

  但是还有一点,越界访问,如果我们用构造器构造了一块系统没有分配给我们内存,我们就拥有了对这块内存的访问权,但是我们却没有返回给系统的权利,因为我们没有向系统申请过这块内存的使用权,所以这样也会造成出错。

http://theenigmaco.com/zhanqu/313.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有