Я хотел бы создать объект bool с помощью вектора объектов типа X. Когда я создаю вектор:
vector<X>* v = new vector<X>;
v.reserve(10000);
Я хочу, чтобы минимальная работа была максимально возможной. Будет вызван только конструктор по умолчанию (мой конструктор по умолчанию пуст для X)?
Позже в моей программе, как мне "создать" мой объект, используя пул объектов? Было бы что-то вроде:
int y = get_next_object_in_pool();
X x = v[y];
где get_next_object_in_pool()
просто хранит индекс для следующего свободного индекса в векторе?
Конструктор для X не будет вызван, потому что резерв не создает никаких объектов. Не путайте резерв с изменением размера, они делают разные вещи. Я думаю, что из остальной части вашего описания вам нужен запас, но помните, что он оставляет ваш вектор размером 0.
Когда вы хотите добавить объект в пул, это что-то вроде
v.push_back(X());
предполагая, что вы хотите добавить построенный по умолчанию объект.
Если вы хотите получить полный контроль над своим пулом, с любым старым сочетанием построенных и незастроенных слотов в вашем бассейне. то вам придется делать что-то еще. Вы не получите это с помощью vector<T>
.