Если вы передаете свой экземпляр синглтона по значению, значит, это не одноэлементный файл, не так ли?
Просто возвращайте ссылку (или указатель) на экземпляр всякий раз, когда вам нужно получить к нему доступ (#1).Кэширование ссылки один раз для каждого клиента только увеличит сложность и почти наверняка не будет быстрее.
Я не уверен, в чем разница между # 1 и # 3, помимо дополнительной сложности.Оба используют функцию для доступа к экземпляру синглтона через ссылку / указатель.