Я читал разные статьи по управлению памятью, готовясь к тому, как я хочу, чтобы моя архитектура работала, и я больше всего беспокоился о том, как распределители будут использоваться, создаваться и обрабатываться по всей базе кода. Одна из проблем заключается в том, что мой дизайн всегда имеет распределитель (и) в глобальном масштабе, поскольку у меня нет типичного одноэлементного проекта, содержащего распределители, у них нет реального места для жизни. Я бы не хотел использовать для этого глобальные переменные из-за всех проблем, которые обычно возникали при использовании глобальных переменных.
Это привело меня к созданию чего-то такого, как
void* operator new(size_t size, uint32_t type)
{
return gAllocator.Alloc(size, type);
}
Это приведет к тому, что в заголовочном файле будет просто новое определение с объявлением в .cpp. Этот файл .cpp будет иметь gAllocator
, только в файле .cpp (и может быть доступен на месте, за исключением нового вызова.
Если бы мой дизайн был таким, будет ли gAllocator
глобальной переменной, если нет, то к какому типу переменных она будет относиться? Что, если это было в пределах только пространства имен?