Извиняюсь,
тогда просто добавлю, что
старые соединения нужно(можно) убирать,
учесть обращения из разных потоков.
В случае достижения лимита, можно блокировать вызов ли возвращать fail
Зачем рандомный выбор - незачем.
Дополнительные проверки на корректность кода, учет двойных возвратов,
В идеале возврат можно было бы делать в деструторе ну или аналоге в этом языке, defer или или как там