Обе Маршалла Клайна "C ++ FAQ Lite" и Скотта Мейерса "Эффективный C ++" предлагают использовать функции, возвращающие локальные статические объекты, чтобы избежать возможных проблем с порядком инициализации нелокального статического объекта.
Короче говоря (из "Effective C ++", 3-е издание Скотта Мейерса):
FileSystem& tfs()
{
static FileSystem fs;
return fs;
}
Оба автора добавляют, что это похоже на шаблон Singleton, за исключением того, что это не гарантирует, что локальный fs является единственным экземпляром FileSystem.
Теперь, в ситуации, когда достаточно одного экземпляра класса управления ресурсами T, с какими причинами вы предпочитаете класс Singleton или этот локальный статический подход друг другу? Нет необходимости строго ограничивать использование класса T одним экземпляром, хотя нашему приложению не требуется более одного.
Очевидно, что наличие глобального объекта является проблемой при выполнении TDD, но в этом случае оба подхода являются глобальными.