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

0

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

Чтобы достичь вышеуказанного, я сделал следующее:

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
}
Теги:
performance
vector
memory-management
object-pooling

1 ответ

0

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

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

Ещё вопросы

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