0

我有一个带有 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)) );

我想删除这段记忆,我该如何删除呢?

谢谢

4

1 回答 1

3

当s 被销毁时,如果没有其他s 引用这些对象,则 s拥有的对象shared_ptr将被删除(因此它们的内存将被释放) 。在这种情况下,每个s in将在以下任一情况下被破坏:shared_ptrshared_ptrshared_ptrm_particleRenderer

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

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

于 2013-06-28T06:17:25.757 回答