Мне кажется, что проблему кеширования и ленивой инициализации лучше отдать пользователю. Он в отличие от автора библиотечного кода может принимать информированное решение.
Мы же например используем thread safe инициализацию локальных статических переменных, это удобно.