Вы забыли delete a;
в конце main()
.
Обратите внимание, что все, что вы написали, не должно никогда переходить в реальный код.Вы никогда не должны использовать динамическое распределение (new
), если вам абсолютно не нужно и точно знать, почему.
Если вы хотите сохранить вектор указателей в образовательных целях, то вот лучший способ написанияэто:
#include <vector>
#include <memory> // for unique_ptr
// intentionally left blank; NO abusing namespace std!
struct Foo
{
int c;
void whatever()
{
std::vector<std::unique_ptr<test>> v;
if (true)
{
v.emplace_back(new test);
v.back()->c = 1;
}
// everything is cleaned up automagically
}
};
int main()
{
Test a; // automatic, not dynamic
a.whatever();
return 1;
}
Это все еще только для образовательных целей;в реальной жизни вы бы очень старались обойтись с простой std::vector<test>
, поскольку vector
уже уже является динамической структурой данных и нет необходимости в дополнительном уровне косвенности.