S>Но иногда всё таки требуется отложенная инициализация с многопоточностью и произвольным временем доступа (например, аллокаторы — никто не запрещает заполнять контейнер при инициализации статики, те же глобальные const std::string x = "xxx" и т.п.). Как я понял, универсального метода создания такого singleton нет, всё упирается в неатомарную инициализацию объектов синхронизации. Пока обхожусь такой вот конструкцией:
Точнее, здесь получается не отложенная инициализация, а специфическое время жизни объекта — от первого обращения или инициализации статики до закрытия приложения. Кстати, может следует таким образом инстанцировать общий lock, а затем честно пользовать отложенную инициализацию через double check locking pattern? И всё равно непонятно, как быть с удалением...