永发信息网

C++中栈和堆上建立对象的区别

答案:1  悬赏:0  手机版
解决时间 2021-04-06 09:34
C++中栈和堆上建立对象的区别
最佳答案
在C++中类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* p=new A(),A*p=(A*)malloc();静态建立一个类对象,是由编译器为对象在栈空间中分配内存,通过直接移动栈顶指针挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。动态建立类对象,是使用new运算符将对象建立在堆空间中,在栈中只保留了指向该对象的指针。栈是由编译器自动分配释放 ,存放函数的参数值,局部变量的值,对象的引用地址等。其操作方式类似于数据结构中的栈,通常都是被调用时处于存储空间中,调用完毕立即释放。堆中通常保存程序运行时动态创建的对象,C++堆中存放的对象需要由程序员分配释放,它存在程序运行的整个生命期,直到程序结束由OS释放。而在java中通常类的对象都分配在堆中,对象的回收由虚拟机的GC垃圾回收机制决定。
1.下面的程序来看看静态建立和动态建立对象的区别
C++中对象的建立可以在堆和栈上。分别为动态建立和动态建立的方式,构建堆上的对象时一般使用new关键字,而对象的指针在栈上。使用new在堆上构建的对象需要主动的delete销毁。C++对象可以在堆或栈中,函数的传参可以是对象(对象的拷贝),或是对象的指针。而在java中对象一般分配在堆上,对象的传值只有值类型,即对象的引用(地址),这样看来C++要灵活的多。关于c++数组的内存分配还有这里提到的拷贝构造函数
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问办理房产证多少钱一个平方来收取
男人什么年龄硬不起了
fate线末尾士郎的实力是什么水平
与孝有关的名言(3句)
mon屏是怎么监控受电弓状态的
单选题下列对欧盟的性质判断正确的是A.世界最
wow侦查海滩任务
哪里有tekla培训机构啊
从菜单“应用程序——系统工具”里运行UNetbo
猜两个字 二人一日去观花, 两只蝴蝶藏花下。
赞美校长的句子大全,赞扬校长的对联
以前有看过一部电影,关于外星人的.它们很爱喝
为什么富人都比较自信
求一脚本高手! 游戏神武抓变异! 自动遇怪判断
两三万买个啥样二手车 别太丑 也别总修 不要
推荐资讯
学德语前景怎么样 可以做什么工作
太原到青海从哪上高速,太原到青海自驾攻略
我脾胃不是很好,看到很多人说服用鹤年堂的砂
手机拿到当铺去抵押能抵押多少钱?
今天买了两瓶五粮液,好像是红色的,我也没注
单选题多细胞生物体的个体发育起始于一个受精
英雄杀台词赵飞燕,qq英雄杀赵飞燕的台词
团结写一句话,关于团结协作的名言警句
有一款手游,比阴阳师早出的,但是操作模式很
单选题关于什么是商品,正确的选项是A.由自己
举证责任什么意思,什么叫做“举证倒置”
西湖开头的诗句大全,西湖的诗句大全
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?