Я искал пользовательские распределители и довольно часто вижу, что они используют какую-то функцию для выделения памяти. В целях тестирования и дальнейшего самообразования я попытался сделать «простой» пример. Тем не менее, есть одна фундаментальная вещь, которую я понимаю, как это сделать. Одно из ключевых отличий 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
).