Вам просто нужно реализовать оператор new () для вашего класса.Ваша реализация должна получить память от экземпляра распределителя.
В заголовочном файле для вашего класса вам нужно объявить операторы выделения / освобождения:
public:
void * operator new(size_t size);
void * operator delete(void * obj, size_t size);
void * operator new[](size_t size);
void * operator delete[](void * obj, size_t size);
Тогда вам нужнореализовать их.Где-то вам нужно создать экземпляр распределителя;возможно просто сделайте это статическим в файле, где вы реализуете эти операторы.Затем, просто взглянув на документы API на этом веб-сайте, вы сделаете что-то вроде ниже.Я вставил утверждения, потому что не вижу, как передать размер объекта этому распределителю;это фактически означает, что YourClass лучше не служить родителем для других классов.
static cds::details::Allocator<YourClass> allocator;
void * YourClass::operator new(size_t size) {
assert size == sizeof(YourClass);
return allocator.New();
}
void * YourClass::operator new[](size_t size) {
return allocator.NewArray(size/sizeof(YourClass));
}
void YourClass::operator delete(void * object, size_t size) {
return allocator.Delete(object);
}
void YourClass::operator delete[](void * object, size_t size) {
return allocator.DeleteArray(object, size/sizeof(YourClass));
}
Я не слишком доволен утверждениями и делениями, но уже поздно и я устал.Может быть, кто-то еще знает более элегантный способ сделать эти API-интерфейсы немного лучше.Но это сработает.