我有一个带有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)) );
我想删除此内存,如何删除它?
谢谢
答案 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
被销毁。