C++ vector的释放
??? 項(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 子函数的指针释放问题
- 下一篇: autojs遍历当前页面所有控件_PyQ