Вызов конструктора/деструктора объекта с помощью специального распределителя

Я искал пользовательские распределители и довольно часто вижу, что они используют какую-то функцию для выделения памяти. В целях тестирования и дальнейшего самообразования я попытался сделать «простой» пример. Тем не менее, есть одна фундаментальная вещь, которую я понимаю, как это сделать. Одно из ключевых отличий mallocот newзаключается в том, что с new вызывается конструктор. Что если я захочу написать свой собственный распределитель, который по сути заменит new, как мне вызвать конструктор при использовании malloc?

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

Я создал пример тестового кода, в котором я надеялся, что конструктор SomeClassбудет вызываться во время распределения, но я не понимаю, как это сделать.

#include <malloc.h>

void* SomeAllocationFunction(size_t size) {
    return malloc(size);
}

class SomeClass
{
public:
    SomeClass() {
        int con = 1000;
    }

    ~SomeClass() {
        int des = 80;
    }
};

int main(void){
    SomeClass* t = (SomeClass*)SomeAllocationFunction(sizeof(SomeClass));
    return 0;
}

(В качестве примечания я знаю, что могу просто использовать new. Однако в целях обучения я пытаюсь создать собственный распределитель, который не просто вызывает newилиplacement new).

10
задан mmurphy 18 April 2012 в 02:03
поделиться