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...