【问题标题】:Vectors of pointers to objects指向对象的指针向量
【发布时间】:2016-02-24 02:18:45
【问题描述】:

我正在尝试使用以下指向自定义类对象的指针向量tree_node

std::vector<tree_node*> branch;

在我的代码中,我需要在以下函数中使用分支

void search_tree::tree_tries(tree_node& a){
  a.visits++; //member of class tree_node
  branch.push_back(&a);
  if(a.nodes>0){
     branch_position++;
     int nodo=rand()%a.nodes;
     tree_tries(a.children_nodes[nodo]);
  }
  else{
     backtrack();//another function, enters branch[] pointers members to modify them
  }
}

我的问题在于如何管理branch 向量。我需要使用push_back 函数,因为我不知道我必须指向多少和哪些对象,并且使用push_back 可以让事情变得简单。在backtrack() 结束时结束此函数后,我需要“重置”向量的指针,即我需要擦除它们以便push_back 将从向量的开头开始分配。

我不确定delete 在这里是否有用,我指向的对象是我需要以各种方式保存和使用的已经构建的对象。我只是想知道是否有一种有效的方法可以删除指针而不触及指向的对象。

【问题讨论】:

  • 为什么人们总是努力通过使用原始指针和指针向量来让生活变得困难?
  • 向量是指针而不是对象有什么具体原因吗?
  • 因为我还没有研究过智能指针,只是想知道有没有办法
  • 只是clear() 向量。由于它只包含指针而不包含实际对象,因此它们不会被自动删除。
  • @PaulMcKenzie 你好。是的,我需要使用rand() 跟踪我选择的各种对象,并使用backtrack() 修改一些成员值。

标签: c++ pointers vector


【解决方案1】:

vector.clear() 只会清空向量而不接触指向的对象。就是这样:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2011-02-11
    • 2011-08-04
    • 2011-12-19
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多