Я работаю над библиотекой, где пользователи должны иметь возможность использовать статические глобальные экземпляры. Эти случаи (время запуска, прежде чем основной) регистрируются в другой глобальный вектор, который затем может быть использован ...Саморегистрационный глобальный объект
В настоящее время он проходит примерно так ...
class A;
std::vector<A*> v;
class A {
public:
A (int i) : i(i) {
v.push_back(this);
}
int get() const {
return this->i;
}
private:
int i;
};
A a(1);
A b(2);
int main()
{
for (A* const& c : v)
std::cout << c->get() << std::endl;
for (std::vector<A*>::iterator i = v.begin(); i != v.end(); i++)
delete *i;
return 0;
}
Однако, я боюсь, что это код будет течь ... тем более, если я не хочу, чтобы пользователи явно удаляли содержимое вектора (они все равно его забудут), это должно произойти автоматически в конце main.
Есть ли другие решения? Я хотел использовать вектор std :: unique_ptr, но, видимо, они не работают таким образом ...
«* Я хотел использовать вектор std :: unique_ptr, но, видимо, они не работают таким образом ... *« Пожалуйста, уточните. Кроме того, вы не пытаетесь «удалить» статически выделенные объекты (этот код не течет, как вы его предполагаете, но удаление объектов дважды вызывает UB). – ildjarn
Поскольку вы работаете с статическими экземплярами: a) как этот код протекает и b) почему вы вызываете 'delete' на указатели, указывающие на статические объекты. В целом, я бы сказал, что ваш код (как вы показали нам) является ошибкой, но он не должен течь. – Grizzly