c++中堆棧及建立對象範例程式碼_C 語言

來源:互聯網
上載者:User

簡介

棧(stack),先進後出,位於一級緩衝中,作業系統自動分配釋放 ,存放函數的參數值,局部變數的值等,被調用時處於儲存空間中,調用完畢立即釋放。

堆(heap),堆包含一個鏈表來維護已用和閒置不連續的記憶體塊,存放在二級緩衝中,一般由程式員分配釋放。

快速記憶方式:

一級緩衝比二級緩衝快,棧是一個先進後出列表,存取非常快,所以棧是在一級緩衝中。

棧中不能隨機取資料,只能取最上面的一個,存放的內容必然要有嚴格的存取順序,所以適合函數調用時的形參、局部變數。

棧空間有限,一般PC一級緩衝就幾M,所以其中的資料也是快速使用,快速刪除。像形參、局部變數,在函數調用結束系統就會把資料主動銷毀了。

堆空間大,由程式員維護,系統不會主動銷毀。

範例程式碼如下:

#include <iostream>using namespace std;class TestNew{private:  int ID;public:  TestNew(int ID);  ~TestNew();};TestNew::TestNew(int ID){  this->ID = ID;}TestNew::~TestNew(){  std::cout<<"對象 "<<this->ID<<" 執行解構函式"<<std::endl;}void Test(){  TestNew test(1);//建立對象1,不使用new,儲存在棧中  TestNew *pTest = new TestNew(2);//建立對象2,使用new,儲存在堆中  //delete pTest;}int main(){  Test();//這個地方有點問題,pTest沒有進行處理,會導致記憶體泄露,實際應用中要注意呀}

輸出結果:

對象 1 執行解構函式

說明函數調用結束,對象1被系統主動銷毀了。

如果把Test()方法中,delete前的注釋去掉。

輸出:

對象 2 執行解構函式

對象 1 執行解構函式

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.