Несколько часов назад я задал этот вопрос .Я узнал, что std :: vector удаляет каждый из своих элементов при вызове деструктора.Рассмотрим эту программу (производную от предыдущего примера): деструктор
#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 называется ожидаемым;однако деструкторы элементов Bar * в fv не называются.Согласно this , должен быть вызван деструктор каждого элемента fv.Что мне здесь не хватает?