カスタム オブジェクトのベクトルがあります。
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 を使用して重複を削除できますか?