日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
解析C++對象在堆棧區(qū)的析構(gòu)

關(guān)于堆棧區(qū)和析構(gòu)函數(shù),我想大家都已經(jīng)很熟悉了。下面介紹的是C++對象在堆棧區(qū)的析構(gòu)。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、克東網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、克東網(wǎng)絡(luò)營銷、克東企業(yè)策劃、克東品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供克東建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

作為一個C++程序員,區(qū)別于其他面向?qū)ο笳Z言其中最敏感的就是對new(malloc)和delete(free)這兩個關(guān)鍵字了。

今天在閱讀老大的代碼的時候,在COM對象的重復(fù)賦值的時候發(fā)現(xiàn)在對一個vector重新分配的insert新元素的時候,沒有先clear掉。自己以前在用STL的容器的時候總是在開頭和***調(diào)用clear,但是進過實驗和調(diào)試之后發(fā)現(xiàn),含有vector的對象在析構(gòu)的時候就是不做vector.clear()的話,vector中的元素也能析構(gòu)。

后來稍微一想,就發(fā)現(xiàn)自己之前的想法是多愚蠢,STL的容器都是C++對象,既然是對象肯定會在自己的析構(gòu)函數(shù)中做一些清理,如果連這些都沒有的話,那STL也不會發(fā)展成C++***的一個庫了。

由此又想到了很多,vector在clear到底干了什么,從匯編的角度來說,在棧上的一切變量都是不會導(dǎo)致內(nèi)存泄露的,那么vector是否真的不用去調(diào)用clear呢?錯,vector的元素肯定不會是建立在棧上的,而是建立在堆上的。為什么,建立在棧上的數(shù)組大小肯定是在編譯時候就確定的,為什么?想到了在學(xué)校時候的一個非常典型的例子:

 
 
 
  1. int x;  
  2. scanf("%d", &x);  
  3. char ch[x]; 

 

試圖通過輸入一個數(shù)字來分配對象的x個字符,這是不行的,為什么?當(dāng)時老師只說這是在編譯時期確定的,不能動態(tài)確定,只能寫成

 
 
 
  1. int x;  
  2. scanf("%d", &x);  
  3. char* ch = new char[x]; 

 

這已經(jīng)是分配在堆上了,以后再運行期動態(tài)確定。那到底為什么棧上的空間不能在運行期動態(tài)確定呢?從匯編的角度來理解就容易多了:棧上能夠移動的元素總是在棧頂?shù)模瑹o非就是Push,Pop

 
 
 
  1. char ch[x];  
  2. int i,j; 

 

試想一下,面對這樣的動態(tài)分配,該怎樣生成指令來制定棧的建立呢,由于在建立棧的時候每一個指令在棧中需要占用的大小,堆中就不一樣了,堆中內(nèi)存可以是不連續(xù)的,不用遵循FILO的棧原則,所以是相當(dāng)靈活的。

現(xiàn)在來看為什么STL的容器都是建立在堆上的,STL的容器往往都是可以調(diào)整大小的,試問建立在棧上的元素,如何能保證它在任何時候都能調(diào)整大小呢,除非在任何時候都能保證它在棧頂,顯然這是不現(xiàn)實的!

本文地址:http://blog.csdn.net/woshishenguanyear/archive/2011/06/13/6542527.aspx


網(wǎng)站題目:解析C++對象在堆棧區(qū)的析構(gòu)
網(wǎng)址分享:http://www.5511xx.com/article/coogjoe.html