数時間前に私はthis questionと尋ねました。 std :: vectorはデストラクタが呼び出されたときに要素のそれぞれを削除することを学びました。このプログラム(前の例の派生物)を考えてみましょう。std :: vector破壊と予期しないメモリリークpt 2
#include <vector>
#include <iostream>
class Bar {
int x;
public:
~Bar() {
std::cout << "~bar()" << std::endl;
}
};
class Foo {
std::vector<Bar*> v;
public:
Foo() {
this->v.push_back(new Bar());
this->v.push_back(new Bar());
this->v.push_back(new Bar());
}
~Foo() {
}
};
int main() {
Foo f;
Bar* b = new Bar();
// Bar::~Bar() called once
delete b;
// Bar::~Bar() not called three times as expected
return 0;
}
bのデストラクタが期待通りに呼び出されました。しかし、f.vのBar *要素のデストラクタは呼び出されません。 thisによると、f.vの各要素のデストラクタを呼び出す必要があります。私はここで何が欠けていますか?
この新しい例は、前の例とまったく同じではありません。つまり、ポインタのコンテナがあります。 –
ヘイ・ジェームズ:ここで重複して申し訳ありません。以前の質問に、私が意図していたより少し違ったことを尋ねたことがありました。 – rustushki