「決してしない」などの答えは好きではないので答えますが、コンテンツを解放せずにベクトルを解放するリスクを回避するためのいくつかのトリックを提供します。
私がよく理解している場合は、DETAIL ポインターのベクトルがあります。
std::vector<DETAIL*> details;
したがって、特定の m_SomeVar を参照するすべての指定されたオブジェクトを削除および削除するメソッドが必要です: (今のところ、それが無料の関数であると仮定しましょう)
void free_references(int reference, std::vector<DETAIL*> & vector)
{
std::vector<DETAIL*>::iterator it = vector.begin();
while (it != vector.end())
{
if ((*it)->nRef == reference)
{
delete *it;
// erase() makes the original 'it' in an unknown state which can't be used
// erase will return a valid iterator which is, in this case, the following element
it = vector.erase(it);
}
else
{
++it;
}
}
}
あなたのコードで理解しているように、ベクトルはクラスのメンバーです。デストラクタ内のすべてを削除できるのは、これが良い理由です。
ただし、std::unique_ptr
ここでは、ベクトル内の unique_ptr コンテナーへのポインターの所有権を「与える」ために使用します。そして、ベクトル メモリが解放されると、std::unique_ptr
スマート ポイントは、所有するポイントされたオブジェクトが解放されることを確認します。