我记得曾经听说以下代码不符合C++,并希望拥有比我多得多的C++合法性的人能够确认或拒绝它。

std::vector<int*> intList;
intList.push_back(new int(2));
intList.push_back(new int(10));
intList.push_back(new int(17));

for(std::vector<int*>::iterator i = intList.begin(); i != intList.end(); ++i) {
  delete *i;
}
intList.clear()

理由是 vector 包含指向无效内存的指针是非法的。现在显然我的示例可以编译,并且甚至可以在我所知道的所有编译器上运行,但是它是符合标准的C++还是应该执行以下操作?实际上,我被告知这是符合标准的方法:
while(!intList.empty()) {
  int* element = intList.back();
  intList.pop_back();
  delete element;
}

最佳答案

您的代码很好。如果出于某种原因担心元素暂时失效,则将循环的主体更改为

int* tmp = 0;
swap (tmp, *i);
delete tmp;

10-06 09:02