c++中堆棧及創(chuàng)建對象示例代碼
簡介
棧(stack),先進后出,位于一級緩存中,操作系統(tǒng)自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等,被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放。
堆(heap),堆包含一個鏈表來維護已用和空閑的不連續(xù)的內(nèi)存塊,存放在二級緩存中,一般由程序員分配釋放。
快速記憶方式:
一級緩存比二級緩存快,棧是一個先進后出列表,存取非???,所以棧是在一級緩存中。
棧中不能隨機取數(shù)據(jù),只能取最上面的一個,存放的內(nèi)容必然要有嚴格的存取順序,所以適合函數(shù)調(diào)用時的形參、局部變量。
??臻g有限,一般PC一級緩存就幾M,所以其中的數(shù)據(jù)也是快速使用,快速刪除。像形參、局部變量,在函數(shù)調(diào)用結(jié)束系統(tǒng)就會把數(shù)據(jù)主動銷毀了。
堆空間大,由程序員維護,系統(tǒng)不會主動銷毀。
示例代碼如下:
#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<<" 執(zhí)行析構函數(shù)"<<std::endl;
}
void Test()
{
TestNew test(1);//創(chuàng)建對象1,不使用new,存儲在棧中
TestNew *pTest = new TestNew(2);//創(chuàng)建對象2,使用new,存儲在堆中
//delete pTest;
}
int main()
{
Test();//這個地方有點問題,pTest沒有進行處理,會導致內(nèi)存泄露,實際應用中要注意呀
}
輸出結(jié)果:
對象 1 執(zhí)行析構函數(shù)
說明函數(shù)調(diào)用結(jié)束,對象1被系統(tǒng)主動銷毀了。
如果把Test()方法中,delete前的注釋去掉。
輸出:
對象 2 執(zhí)行析構函數(shù)
對象 1 執(zhí)行析構函數(shù)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
Qt實現(xiàn)SqlTableModel映射組件應用小結(jié)
在Qt中提供了QSqlTableModel模型類,它為開發(fā)者提供了一種直觀的方式來與數(shù)據(jù)庫表格進行交互,本文就來介紹一下Qt實現(xiàn)SqlTableModel映射組件應用小結(jié),感興趣的可以了解一下2023-12-12
C++ 冒泡排序數(shù)據(jù)結(jié)構、算法及改進算法
冒泡排序是一種簡單排序。這種排序是采用“冒泡策略”將最大元素移到最右邊。在冒泡過程中,相鄰兩個元素比較,如果左邊大于右邊的,則進行交換兩個元素。這樣一次冒泡后,可確保最大的在最右邊。然后執(zhí)行n次冒泡后排序即可完畢2013-04-04
C++實現(xiàn)LeetCode(95.獨一無二的二叉搜索樹之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(95.獨一無二的二叉搜索樹之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07

