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