如何避免list.erase调用析构函数

时间:2014-08-03 15:13:34

标签: c++ list destructor erase

我尝试在列表中返回一个值,然后将其从列表中删除,但不删除其内容。但是当我调用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;
    }
}

2 个答案:

答案 0 :(得分:0)

在调用unique_ptr<Vertice>之前,使用swap列表和erase方法将对象的所有权移至另一个指针。

答案 1 :(得分:0)

你可以复制该值,而不是在删除之前指向它。

Vertice temp;

temp = *it;

您可以使用std::optional<Vertice>来改善此问题,以避免首先构建空Vertice