【问题标题】:Best way to clear the std::vector array?清除 std::vector 数组的最佳方法?
【发布时间】:2015-12-15 00:44:17
【问题描述】:

哪种方法更好更快,为什么?

for (unsigned int i=0; i<meshes.size(); i++)
{
    meshes.erase(meshes.begin() + i);
    if(meshes[i]) delete meshes[i];
}

或者这个……

for (auto it = meshes.begin(); it != meshes.end(); ++it)
    delete *it;
meshes.clear();

【问题讨论】:

  • 为什么将指针存储在向量中? What is "fast"?什么是更好的”?两者都很奇怪、缓慢且危险。
  • 在向量中存储指针有什么问题?
  • 第一个sn-p完全坏掉了。第二个破碎的稍微少一些。
  • @NRitH 什么都没有。我认为 Drop 的意思是“为什么要在向量中存储 拥有 指针而不是普通对象?”或“你为什么使用 raw owning 指针?”。

标签: c++11 visual-c++ c++14


【解决方案1】:

理想情况下,你有std::vector&lt;std::unique_ptr&lt;Mesh&gt;&gt; meshes;,然后它只是meshes.clear();,或者如果可能的话,只是std::vector&lt;Mesh&gt;

【讨论】:

  • 理想情况下Mesh 不必动态分配:p
【解决方案2】:

我不太清楚你想用第一个 sn-p 实现什么,但假设你的数据在 std::vector&lt;Mesh*&gt;其中每个指针是 newed,那么几秒钟 sn-p 看起来是正确和高效的

【讨论】:

    【解决方案3】:

    不妨使用现代 C++ 语法。

    for (auto p: meshes) delete p;
    meshes.clear();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-20
      • 2017-08-22
      • 2010-11-13
      • 2018-04-19
      • 2017-11-13
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多