Использование аллокатора
От: koenjihyakkei Россия  
Дата: 11.10.19 19:23
Оценка:
Всем привет!

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

Типа такого:
struct Foo {
    Foo(int n) {}
    void* operator new(size_t size, Allocator* allocator) {
        return allocator->Alloc(size);
    }
};

struct Allocator {
    void* Alloc(size_t size) {
        return malloc(size);
    }
};

Allocator allocator;
Foo* foo = new (&allocator) Foo(42);


Мне же больше нравится такой вариант:
struct Foo {
    Foo(int n) {}
};

template<class T>
struct Allocator {
    template<typename Args...>
    T* Alloc(Args ... args) {
        return new T(std::forward<Args>(args)...);
    }
};

Allocator<Foo> allocator;
Foo* foo = allocator.Alloc(42);

Так вот вопрос, может я чего-то упустил, но я не могу найти плюсов у первого варианта по сравнению со вторым.
Вам какой больше нравится, что бы стали использовать в новом проекте?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.