C++ 栈和堆上建立对象的区别
在C++中類(lèi)的對(duì)象建立分為兩種,一種是靜態(tài)建立,如A a;另一種是動(dòng)態(tài)建立,如A* p=new A(),Ap=(A)malloc();靜態(tài)建立一個(gè)類(lèi)對(duì)象,是由編譯器為對(duì)象在??臻g中分配內(nèi)存,通過(guò)直接移動(dòng)棧頂指針挪出適當(dāng)?shù)目臻g,然后在這片內(nèi)存空間上調(diào)用構(gòu)造函數(shù)形成一個(gè)棧對(duì)象。動(dòng)態(tài)建立類(lèi)對(duì)象,是使用new運(yùn)算符將對(duì)象建立在堆空間中,在棧中只保留了指向該對(duì)象的指針。棧是由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值,對(duì)象的引用地址等。其操作方式類(lèi)似于數(shù)據(jù)結(jié)構(gòu)中的棧,通常都是被調(diào)用時(shí)處于存儲(chǔ)空間中,調(diào)用完畢立即釋放。堆中通常保存程序運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建的對(duì)象,C++堆中存放的對(duì)象需要由程序員分配釋放,它存在程序運(yùn)行的整個(gè)生命期,直到程序結(jié)束由OS釋放。而在java中通常類(lèi)的對(duì)象都分配在堆中,對(duì)象的回收由虛擬機(jī)的GC垃圾回收機(jī)制決定。
引用文章:C++中棧和堆上建立對(duì)象的區(qū)別
總結(jié)
以上是生活随笔為你收集整理的C++ 栈和堆上建立对象的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ 创建对象时带括号和不带括号的区别
- 下一篇: C/C++ 回调函数是什么?Intel