我有一个自定义对象的向量。
vector<MyObject*> newOnes;
经过一些填充操作后,newOnes可能有重复的对象,所以我使用 std:unique()。
std::unique(newOnes.begin(), newOnes.end(), isEquivalent); //isEquivalent return true if equal
现在,在我使用完向量之后,我继续使用以下函数释放内存
void MyCalss::releaseSource(vector<MyObject*> v) {
for (unsigned int i = 0; i < v.size(); i++ )
delete v[i];
}
执行时releaseSource(newOnes);
这会导致崩溃。我知道 std:unique 正在创建悬空指针因此崩溃,但我不能在这里使用智能指针。
我可以在这里做些什么来避免这种情况?
像下面这样使用 std:unique 会解决问题吗?
std::sort(new_combs.begin(), new_combs.end());
newOnes.erase(std::unique(newOnes.begin(), newOnes.end()), newOnes.end());
//// so operations
releaseSource(newOnes); //still need to free the other members
我现在不能移动到智能指针(唯一/共享)。这将涉及对我无法修改的代码的更改。
我可以在这里使用 std::set 删除重复项吗?