c vector 釋放記憶體

2021-06-26 17:35:56 字數 1171 閱讀 5382

1.釋放單個指標

關於vector中存放指標的問題,在進行清空的時候比較安全的一種做法是:

std::vectorclassnamevec;

...push_back(new classname());

std::vector::iterator classnameit = classnamevec.begin();

for(;classnameit != classnamevec.end();++classnameit)  }

classnamevec.clear();

2.釋放陣列

vector vecint; 

for   (int   i   =0      ;i    <   10000;   i++) 

vector ::iterator   it_int; 

for   (it_int   =   vecint.begin()   ;   it_int   !=   vecint.end();   it_int++) 

vecint.clear();

3 先釋放內容,在釋放記憶體

,注意儲存的是外部指標的乙個拷貝,刪除時首先是刪除這個拷貝指標的內容,也就是刪除外部指標所指向記憶體的內容,然後再刪除容

器中的變數(用來儲存指標的記憶體).

#include "stdafx.h"

#include

using namespace std;

int _tmain(int argc, _tchar* argv)

return 0;

}4.注意臨時變數帶來的風險

在vector中存放東西要注意以下幾點

存放不同物件沒有任何問題,頂多就是耗費記憶體

但是如果存放指標時 請注意以下幾點

vectorcontype;

contype lttype;

void add()

{type1 temp;

lttype.pushback(&temp); // 注意這個地方有問題。temp的實際位址空間在棧中, 函式結束後, temp就將被釋放,這個時候

vector中的記憶體指向就是非法。

可以如下這麼改

type1* temp = new type1(); // 這個時候temp在堆上

lttype.pushback(temp); // 這樣就沒問題了

c vector 如何釋放記憶體

1.vector容器的記憶體自增長 與其他容器不同,其記憶體空間只會增長,不會減小。先來看看 c primer 中怎麼說 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空...

c vector的記憶體釋放

c 中vector的乙個特點是 記憶體空間只會增長,不會減小。即為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都挨著前乙個元素儲存。設想,如果每次vector新增乙個新元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 撤銷舊空間,這樣效能就會非常慢,所以,實際...

C vector中的記憶體分配與釋放

c vector中resize與reserve的比較 因此,接下來記錄vector是如何進行記憶體的分配與釋放的 c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存 vector的乙個特點 記憶體空間只會增長,不會減小 設想一下,當vec...