日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ vector的释放

發(fā)布時(shí)間:2023/12/2 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ vector的释放 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? 項(xiàng)目上用到vector容器,沒有手動釋放,總是會在這里出現(xiàn)內(nèi)存分配不成功的問題,因此對vector的釋放了解了一下。

??? 初始代碼如下:

vector <float*> dets(nTotalLayers); //dets : 記錄每層圖像的 Hessian 行列式; for (int octave = 0; octave < nOctaves; octave++){for (int layer = 0; layer < nOctaveLayers + 2; layer++){/* The integral image sum is one pixel bigger than the source image*/dets[index] = (float*)malloc((height / step)*(width / step)*sizeof(float));}step *= 2;}

1、關(guān)于是否需要手動釋放 ????

??? (1)直接聲明的vector容器是一個(gè)普通變量,相當(dāng)于一個(gè)未知大小的動態(tài)數(shù)組,不需要手動釋放,超出作用于范圍時(shí)會自動回收。

??? (2)如果是*vec = new vector<>( )這種方法動態(tài)創(chuàng)建的vector,則需要delete vector;

??? (3)如果vector里面存放的是元素而不是指針,這些元素會隨vector的釋放而自動釋放;?

??? (4)如果vector里面存放的是指針,并且指向自己new或malloc的數(shù)據(jù),那么需要一個(gè)一個(gè)手動釋放指針。也就是上面代碼的情況。

?2、關(guān)于vector

???? vector類稱作向量類,它實(shí)現(xiàn)了動態(tài)數(shù)組,用于創(chuàng)建元素?cái)?shù)量變化的對象數(shù)組。像數(shù)組一樣,vector類也用從0開始的下標(biāo)表示元素的位置,但和數(shù)組不同的是,當(dāng)vector對象創(chuàng)建后,數(shù)組的元素個(gè)數(shù)可以隨著vector對象元素個(gè)數(shù)的增大和縮小而自動變化。當(dāng)程序員不知道需要多大的內(nèi)存空間時(shí),可以使用vector,vector會自動申請足夠大的空間以供使用。vector會在程序結(jié)束時(shí)回收內(nèi)存,但也不能立刻回收投入使用,所以不熟練時(shí)盡量少用。

float** dets = (float **)malloc(nTotalLayers*sizeof(float*)); for (int octave = 0; octave < nOctaves; octave++){for (int layer = 0; layer < nOctaveLayers + 2; layer++){/* The integral image sum is one pixel bigger than the source image*/dets[index] = (float*)malloc((height / step)*(width / step)*sizeof(float)); // 這里面有除以遍歷圖像用的步長if (dets[index] == NULL){cout << "Can't allocate memory to dsts" << endl;exit(1);}}step *= 2;} //釋放指針的向量for (int i = 0; i < nTotalLayers; i++){free(dets[i]);}free(dets);dets = NULL;

3、vector內(nèi)存的釋放

?? 可以用swap函數(shù)進(jìn)行釋放,參考:用swap釋放vector

??

總結(jié)

以上是生活随笔為你收集整理的C++ vector的释放的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。