Пул объектов — создание объектов позже не работает

Моя цель состоит в том, чтобы создать вектор, содержащий много предварительно подготовленных (у меня нет двух элементов данных до позже, но я хочу выделить как можно больше в непрерывной памяти) экземпляров моего объекта в непрерывной памяти, а затем в моем Я могу быстро использовать одну из этих подготовленных «оболочек», чтобы быстрее создать экземпляр объекта. Самое главное, что все эти объекты будут расположены в одних и тех же непрерывных адресах памяти.

Для достижения вышесказанного я сделал это:

vector<MyClass*>* v = new vector<MyClass>();
v.reserve(10000);

//Later on....

// I want to create my object in the continuous memory I "reserved"// and have a variable name to it:

v->push_back(MyClass m(10,20));
process(m);

Но я не могу заставить его скомпилироваться, пока у него все еще есть имя переменной на объекте … вот MyClass:

class MyClass{
public:
MyClass();
MyClass(int a, int b);
MyClass(const MyClass& m);
int a;
int b;
private:
//Made above example simpler by putting everything public
}

0

Решение

Я делаю объектные пулы, но я не пытаюсь размещать их в смежной памяти, потому что речь идет не о кэшировании памяти, а о минимизации вызовов к new а также delete,

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]