Всем привет!
В некоторых серьезных проектах видел как в классе переопределяют оператор 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);
Так вот вопрос, может я чего-то упустил, но я не могу найти плюсов у первого варианта по сравнению со вторым.
Вам какой больше нравится, что бы стали использовать в новом проекте?