我可能有这个错误的一些方面,这实际上是我第一次特别用共享指针进行处理。确保向量中的共享指针被正确推回
我正在穿越一棵树。我的树由一个链表组成,其中有一个共享指针向量,代表每个节点的所有子对象。要遍历,我(与开始)试图做到这一点:
//--------------------------------------------------------------
void setupMesh(){
Mesh mesh;
shared_ptr<Mesh> shared_mesh(&mesh);
meshes.push_back(shared_mesh);
checkChildren(root, &temp_mesh);
}
//--------------------------------------------------------------
void checkChildren(Node * temp_node, Mesh * temp_mesh){
if(!temp_node->children.empty()){
for(int i = 0; i < temp_node->children.size(); i++){
if(i > 0){
shared_ptr<Mesh> new_mesh(new Mesh);
meshes.push_back(new_mesh);
}
temp_node = temp_node->children[0].get();
checkChildren(temp_child, temp_mesh);
}
}
}
我的树结构本身似乎不错,但它与我如何穿越它,以及如何我跟踪的更多问题指针。它目前正在返回错误的访问错误。从我可以告诉,它看起来像我插入一个指向临时对象,temp_node,和temp_mesh的指针。
为了简化这一过程我想到:通过属于节点[0](根)的所有儿童
环路。 对于每个孩子,对他们执行相同的循环。如果孩子是[0]孩子,继续添加它的坐标到同一个temp_mesh对象,但如果它是另一个孩子,创建一个新的网格来存储它,并且它的所有第一个孩子。 任何新的网格应该有一个指针推回到网格矢量(vector>)。
有没有人有关如何更有效地做到这一点,或者我在处理内存中的这些指针时出错的建议。
请将[编辑]下拉到[mcve],而不是(看上去像)完整的代码 - 即删除无关的代码,直到获得最短可读的,可编译的代码位来展示问题。 –
希望现在就足够了! – aceslowman
(这是一个有争议的问题,因为有人回答,但为了完整:)非常接近!添加一个包含_just_的'main'和'Node'和'Mesh'的定义,足以复制该问题。它需要完成 - 也就是说,如果我将您提供的代码复制/粘贴到我的编辑器中,它会编译,运行并演示此问题。我在第一条评论中链接的文章给出了比以往更好的描述。 –