2015-12-15 50 views
0

哪种方法更好更快,为什么?清除std :: vector数组的最佳方法?

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(); 
+1

为什么你在向量中存储指针? [什么是“快”](http://ericlippert.com/2012/12/17/performance-rant/)?什么是更好的”?两者都很奇怪,缓慢和危险。 – Drop

+0

在向量中存储指针有什么问题? – NRitH

+5

第一个片段已完全损坏。第二个稍微少了一些。 –

回答

2

我不太知道你在想什么,实现与第一个片段,但秒片段看起来正确的和有效的假设您的数据在std::vector<Mesh*>其中每个指针是new

5

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

+0

*理想*,'Mesh'不必动态分配:p – melak47

+0

@ melak47:是的,当然 - 增加:-) –

1

不妨使用Modern C++语法。

for (auto p: meshes) delete p; 
meshes.clear(); 
相关问题