如何删除存储在向量中的std :: unique_ptr的内存

时间:2013-06-28 06:07:04

标签: c++11 windows-phone-8 directx stdvector unique-ptr

我有一个带有C ++ DirectX组件的Windows Phone 8 C#项目。在C ++ DirectX项目中,我在头文件中定义了一个变量:

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

在我的C ++文件中,我向向量中添加了新元素,如下所示:

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

我想删除此内存,如何删除它?

谢谢

1 个答案:

答案 0 :(得分:3)

shared_ptr s拥有的对象将被删除(因此他们的内存将被释放)shared_ptr被破坏,如果没有其他shared_ptr s提到那些对象。在这种情况下,shared_ptr中的m_particleRenderer中的每一个都会在以下情况下被破坏:

  • 包含m_particleRenderer的对象被破坏(假设它是对象的成员)。
  • shared_ptr已移除m_particleRenderer

因此,如果拥有m_particleRenderer的对象仍然存在,但它不再对m_particleRenderer中的元素有任何用处,那么简单的m_particleRenderer.clear();将删除所有shared_ptr来自vector的s。每个已移除的shared_ptr都将被销毁。如果它是唯一shared_ptr拥有其ParticleRenderer,那么ParticleRenderer也将被销毁。否则ParticleRenderer将继续存在,直到拥有它的最后一个shared_ptr被销毁。