Создание пула объектов

0

Я хотел бы создать объект 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() просто хранит индекс для следующего свободного индекса в векторе?

Теги:
performance
vector
memory-management
object-pooling

1 ответ

0

Конструктор для X не будет вызван, потому что резерв не создает никаких объектов. Не путайте резерв с изменением размера, они делают разные вещи. Я думаю, что из остальной части вашего описания вам нужен запас, но помните, что он оставляет ваш вектор размером 0.

Когда вы хотите добавить объект в пул, это что-то вроде

v.push_back(X());

предполагая, что вы хотите добавить построенный по умолчанию объект.

Если вы хотите получить полный контроль над своим пулом, с любым старым сочетанием построенных и незастроенных слотов в вашем бассейне. то вам придется делать что-то еще. Вы не получите это с помощью vector<T>.

  • 0
    Круто, поэтому я просто создаю свой объект X, используя конструктор не по умолчанию, а затем нажимаю на вектор как и когда. И это будет держать мои объекты Х в постоянной памяти?
  • 0
    @ user997112 да, вектор гарантированно использует непрерывную память.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню