Я на куче выделяю память.
Размер данных больше стека.
vector в куче свои данные размещает
ну и что? vector прекрасно выделяет память сам
Проблема не в том что он выделяет, а то что он не вызывает деструкторы объектов, если я удалю сам вектор.
не храните указатели
Ты в векторе хранишь не объекты, а указатели на объекты. С какой радости он должен вызывать деструкторы, если он не вызывал конструкторы?
Конструктор вызван, деструктора нет. { std::vector<Test*> t; t.push_back(new Test()); }
вот здесь уместен std::vector<std::unique_ptr<Test>>
Ну и кто тут конструирует объекты? Ты или вектор?
std::vector<Test> t; t.emplace_back();
в случае полиморфной иерархии не прокатит, хотя, кто его знает что у него на самом деле
У меня задача выделить в скоупе большой двумерный массив, удалить по выходу из скоупа. Всё.
std::unique_ptr<Test> Foo(std::string_view name); std::vector<std::unique_ptr<Test>> t; t.emplace_back(Foo("test2"));
если большая матрица (нельзя выделить непрерывный кусок хипа), то вектор векторов, если небольшая, то линейная развертка матрицы в одномерном векторе
Такое разве что на однокристалках словить нынче можно, но там подобные С++ выверты однозначно запрещаются в разработке.
у нас легаси 32 бита, легко упираемся в bad alloc
А, ну там может. Кстати, интел хочет вообще выкинуть 32 битное в ближайшем будущем.
адресное пространство сейчас ну очень большое, сложно себе представить, что нужно сделать, чтобы не нашлось куска нужного размера.
Да, это то что нужно. Спасибо.
У них скорее всего до сих пор WinXP c 32 битами.
Обсуждают сегодня