2013-06-28 101 views
0

我有一個帶有C++ DirectX組件的Windows Phone 8 C#項目。在C++中的DirectX項目,我在我的頭文件中定義一個變量:如何刪除存儲在向量中的std :: unique_ptr的內存

std::vector<std::shared_ptr<ParticleRenderer>> m_particleRenderer; 

在我的C++文件,我添加了新的元素添加到Vector這樣的:

m_particleRenderer.push_back(std::unique_ptr<ParticleRenderer>(new ParticleRenderer(m_d3dDevice, m_d3dContext, m_renderTargetView, m_depthStencilView))); 

我想刪除這個記憶,我該如何去刪除它?

謝謝

回答

3

了由shared_ptr旨意被刪除(因此它們的內存將被釋放)擁有當shared_ptr s爲破壞,如果沒有其他shared_ptr小號指那些對象的對象。在這種情況下在m_particleRenderer每個shared_ptr S的將被破壞時或者:

  • 包含m_particleRenderer被破壞的對象(假設它是一個對象的成員)。
  • shared_ptrm_particleRenderer中刪除。

所以,如果擁有m_particleRenderer仍然物體存在,但它不再具有用於m_particleRenderer元素的任何使用,那麼一個簡單的m_particleRenderer.clear();將從vector刪除所有shared_ptr秒。每個刪除shared_ptr將被破壞。如果它是唯一shared_ptr擁有其ParticleRenderer那麼ParticleRenderer也將被銷燬。否則ParticleRenderer將繼續存在,直到擁有它的最後shared_ptr被銷燬。

+0

我想刪除任何使用的內存,因爲我似乎有一些內存泄漏。那將是第一個選項,對吧?對於第二種選擇,「刪除內存」和「銷燬它們」有什麼區別? – Lisa

+0

@Lisa我剛剛注意到'm_particleRenderer'存儲'shared_ptr'而不是'unique_ptr',但第一個選項很可能是你想要的。我會更新答案。 –

相關問題