C++11 如何删除存储在向量中的std::unique_ptr的内存 我有一个Windows C++C项目,用C++ DirectX组件。在C++ DirectX项目中,我在头文件中定义了一个变量: std::vector<std::shared_ptr<ParticleRenderer>> m_particleRenderer; std::vector m_particlerender; 在我的C++文件中,我将新元素添加到向量中: m_particleRenderer.push_back( std::unique_ptr<ParticleRenderer>(new ParticleRenderer(m_d3dDevice, m_d3dContext, m_renderTargetView, m_depthStencilView)) ); m_particlerender.push_back(std::unique_ptr(新的particlerender(m_d3dDevice、m_d3dContext、m_renderTargetView、m_depthStencilView));

C++11 如何删除存储在向量中的std::unique_ptr的内存 我有一个Windows C++C项目,用C++ DirectX组件。在C++ DirectX项目中,我在头文件中定义了一个变量: std::vector<std::shared_ptr<ParticleRenderer>> m_particleRenderer; std::vector m_particlerender; 在我的C++文件中,我将新元素添加到向量中: m_particleRenderer.push_back( std::unique_ptr<ParticleRenderer>(new ParticleRenderer(m_d3dDevice, m_d3dContext, m_renderTargetView, m_depthStencilView)) ); m_particlerender.push_back(std::unique_ptr(新的particlerender(m_d3dDevice、m_d3dContext、m_renderTargetView、m_depthStencilView));,c++11,windows-phone-8,directx,stdvector,unique-ptr,C++11,Windows Phone 8,Directx,Stdvector,Unique Ptr,我想删除此内存,如何删除它 谢谢如果没有其他共享ptr引用这些对象,则当共享ptr被销毁时,共享ptr所拥有的对象将被删除(从而释放它们的内存)。在这种情况下,m_particlerender中的每个shared_ptrs将在以下任一情况下被销毁: 包含m_particlerender的对象将被销毁(假设它是对象的成员) 将从m\u particlerender中删除shared\u ptr 因此,如果拥有m_particlerender的对象仍然存在,但它不再对m_particlerend

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


谢谢

如果没有其他
共享ptr
引用这些对象,则当
共享ptr
被销毁时,共享ptr所拥有的对象将被删除(从而释放它们的内存)。在这种情况下,
m_particlerender
中的每个
shared_ptr
s将在以下任一情况下被销毁:

  • 包含
    m_particlerender
    的对象将被销毁(假设它是对象的成员)
  • 将从
    m\u particlerender
    中删除
    shared\u ptr

因此,如果拥有
m_particlerender
的对象仍然存在,但它不再对
m_particlerender
中的元素有任何用途,那么一个简单的
m_particlerender.clear()
将从
向量
中删除所有
共享的\u ptr
s。每个删除的
共享\u ptr
都将被销毁。如果它是唯一拥有其
particlerender
共享\u ptr
,则
particlerender
也将被销毁。否则,
particlerender
将继续存在,直到拥有它的最后一个
共享ptr
被销毁。

共享ptr
被销毁时,
共享ptr
拥有的对象将被删除(因此它们的内存将被释放),如果没有其他
共享\u ptr
引用这些对象。在这种情况下,
m_particlerender
中的每个
shared_ptr
s将在以下任一情况下被销毁:

  • 包含
    m_particlerender
    的对象将被销毁(假设它是对象的成员)
  • 将从
    m\u particlerender
    中删除
    shared\u ptr

因此,如果拥有
m_particlerender
的对象仍然存在,但它不再对
m_particlerender
中的元素有任何用途,那么一个简单的
m_particlerender.clear()
将从
向量
中删除所有
共享的\u ptr
s。每个删除的
共享\u ptr
都将被销毁。如果它是唯一拥有其
particlerender
共享\u ptr
,则
particlerender
也将被销毁。否则,
particlerender
将继续存在,直到拥有它的最后一个
shared\u ptr
被销毁。

我想删除使用的所有内存,因为我似乎有一些内存泄漏。那将是第一个选择,对吗?对于第二个选项,“删除内存”和“销毁内存”有什么区别?@Lisa我刚刚注意到
m_particlerender
存储的是
共享的ptr
,而不是
唯一的ptr
,但第一个选项很可能是您想要的。我将更新答案。我想删除所有使用的内存,因为我似乎有一些内存泄漏。那将是第一个选择,对吗?对于第二个选项,“删除内存”和“销毁内存”有什么区别?@Lisa我刚刚注意到
m_particlerender
存储的是
共享的ptr
,而不是
唯一的ptr
,但第一个选项很可能是您想要的。我会更新答案。