是的你可以信任載體自行清理。
然而你不能相信東西矢量持有自己清理之後。需要清理的內容可能會在應用程序之外持續存在。如果它的記憶,這不是一個擔心。如果確保XML標籤全部關閉,那麼操作系統將無法爲您提供幫助。
例如,如果你有這樣的一些靠不住的鎖定對象的向量:
class CLock
{
public:
CLock() {}
~CLock() {}
void Lock(...) {...}
void Unlock(...) {...}
};
std::vector<CLock> myLockVec;
如何將其完成時,你的時鐘的專有的矢量解開一切嗎? Vector的構建不瞭解鎖。
這本質上是相同的情況下具有指針的向量:
std::vector<int*> myIntVec;
如何矢量知道哪些指針這裏已被刪除,NULL'd,以及哪些是真的嗎?也許有些已被刪除並設置爲您的特殊值0xdeadbeef,意思是刪除。
的點是向量沒有手段知道這個或知道其元素是指針或鎖或任何。他們只需要具有默認構造函數並且是可複製的,並且滿足向量對其元素的其他這樣的需求。
解決方案是可以肯定的,無論矢量HOLDS需要負責其清理。這叫做RAII - 資源分配是初始化,在這裏更重要的是資源銷燬是取消分配。通過上面的CLock示例,答案很明顯,一定要在完成時解鎖!
class CLock
{
...
~Clock()
{
if (locked)
{
Unlock();
}
}
}
但是指針其實並不那麼明顯。解決方案是將指針包裝在smart_ptr類中。其中最多產的是boost family of smart poniters。
class CSmartPointer<T>
{
CSmartPointer(T* rawPtr)
{
m_ptr = rawPtr;
}
~CSmartPointer()
{
delete m_ptr;
}
}
附加功能得到了充分的指針如引用計數,但上面的例子應該給你的問題的性質的要點以及如何它的典型解決。
通過「每次我跑我的程序的時候我失去RAM」你的意思或「我的可用RAM獲取即使我退出程序小「直到我退出程序我的可用內存變小」了,它變得更小了下一次我跑,直到有一天,我將完全沒有內存剩下「? – 2009-06-08 19:31:45
我借調Max的問題。 Windows我相信實際上並沒有卸載已終止的程序,除非需要。這樣他們在第一次之後就開始更快。 – 2009-06-08 19:48:18
「我想第三個問題剛剛想到,如果矢量是自動創建在堆上,爲什麼你會使用新的關鍵字?」 如果您需要將矢量傳遞到當前範圍之外的某個點,則只需執行此操作。這在實踐中比較少見。 – rlbond 2009-06-09 04:09:28