Я хотел бы создать объект 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>
,
Других решений пока нет …