1

ベクトルがスタックに配置されている場合、自動変数スコープの最後で自動的に破棄されます。

クラスにベクトルを配置した場合はどうなりますか?

class A
{
    vector<B> bs;  // B is POD struct.
};

手動でクリーンアップする必要がありますか?もしそうなら、私はどのようにすべきですか?

4

2 に答える 2

4

そのベクトル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
}
于 2011-03-26T12:06:55.083 に答える
0

ベクターで使用する各Bクラスが、デストラクタで割り当てられた独自のスペースを削除することを確認してください。これにより、ベクターがスコープ外になったときに、メモリリークが発生することはありません。

于 2011-03-26T13:09:01.843 に答える