2016-03-05 63 views
-6

我有一个对象矢量(vector<Vertex> setOfVertices),我想创建一个指定数量的这个向量中的新对象。这是否是正确的方式?将一个对象push_back成矢量

for (int i = 0; i < 10; i++) 
    setOfVertices.push_back(Vertex()); 

或者是它更好地做到这一点是这样的:

for (int i = 0; i < 10; i++) 
{ 
    Vertex * V = new Vertex();  
    setOfVertices.push_back(*V); 
} 

我是否需要写一些类型的析构函数在后一种情况?

或者放弃std:vector并使用数组会更好吗?

+4

'顶点V =新的顶点(); '这是为你编译的吗?它需要一个特殊的'Vertex'构造函数。 – juanchopanza

+0

我真的很抱歉,我忘了星号,立即编辑 –

+3

现在你有内存泄漏。 – juanchopanza

回答

0

second示例有内存泄漏。

如果你想要的只是一个“填充”功能,那么setOfVertices.insert(setOfVertices.end(), 10, Vertex());就够了。

但是,如果你想要,而不是什么是插入不同Vertex对象然后

// Make sure only a single memory allocation takes place. 
setOfVertices.reserve(setOfVertices.size() + 10); 

for (int i = 0; i < 10; i++) 
    setOfVertices.push_back(Vertex(i)); 
+0

谢谢你的完整答案! –

0

您可以使用“补”过载std::vector::insert

setOfVertices.insert(setOfVertices.end(), 10, Vertex()); 

有没有必要给自己分配内存,std::vector会为你做的。所有你需要做的是通过一个“参考”Vector为新的元素复制。

+0

谢谢,那是一个很好的解决方案! –