ベクトルがスタックに配置されている場合、自動変数スコープの最後で自動的に破棄されます。
クラスにベクトルを配置した場合はどうなりますか?
class A
{
vector<B> bs; // B is POD struct.
};
手動でクリーンアップする必要がありますか?もしそうなら、私はどのようにすべきですか?
ベクトルがスタックに配置されている場合、自動変数スコープの最後で自動的に破棄されます。
クラスにベクトルを配置した場合はどうなりますか?
class A
{
vector<B> bs; // B is POD struct.
};
手動でクリーンアップする必要がありますか?もしそうなら、私はどのようにすべきですか?
そのベクトルbs
は、囲んでいるクラスのデストラクタ(つまり、A
のデストラクタ)が呼び出されたときに破棄されます。
void f()
{
{
A a;
//working with a;
}//<--- here a goes out of scope, so it's destructor is called;
//so not only a is destructed but also a.bs
}
ベクターで使用する各Bクラスが、デストラクタで割り当てられた独自のスペースを削除することを確認してください。これにより、ベクターがスコープ外になったときに、メモリリークが発生することはありません。