我尝试在列表中返回一个值,然后将其从列表中删除,但不删除其内容。但是当我调用list.erase
时,此函数会调用项目的析构函数。因此,项目被删除后temp
的内容也会被破坏。如何保留temp
的内容?
Vertice *temp = NULL;
//Remove da lista o vértice escolhido para iniciar a busca.
for (list<Vertice>::iterator it = lista.begin(); it != lista.end(); it++) {
if (it->getId() == (v)) {
temp = &*it;
lista.erase(it);
break;
}
}
答案 0 :(得分:0)
在调用unique_ptr<Vertice>
之前,使用swap
列表和erase
方法将对象的所有权移至另一个指针。
答案 1 :(得分:0)
你可以复制该值,而不是在删除之前指向它。
Vertice temp;
temp = *it;
您可以使用std::optional<Vertice>
来改善此问题,以避免首先构建空Vertice
。