Да, это, безусловно, возможное решение.Я не совсем уверен, что делает повышение с его синглтоном за кулисами;Вы можете посмотреть это сами в коде.
Шаблон синглтона во многом похож на создание глобального объекта и доступ к глобальному объекту.Существуют некоторые различия:
1) Экземпляр синглтон-объекта не создается до тех пор, пока к нему не обращаются впервые, тогда как глобальный объект создается при запуске программы.2) Поскольку одноэлементный объект не создается до тех пор, пока к нему не обращаются в первый раз, он фактически создается при запуске программы.Таким образом, экземпляр singleton имеет доступ к другим полностью созданным объектам в программе, когда конструктор фактически работает.3) Поскольку вы обращаетесь к синглтону через метод getInstance () (метод get_const_instance boost), для выполнения вызова этого метода есть небольшие накладные расходы.
Так что если вас не интересует, когда на самом деле синглтонсозданный, и может жить с ним, создаваемым при запуске программы, вы можете просто использовать глобальную переменную и получить к ней доступ.Если вам действительно нужен синглтон, созданный после запуска программы, тогда вам нужен синглтон.В этом случае вы можете захватить и удерживать ссылку на объект, возвращаемый get_const_instance (), и использовать эту ссылку.
Что-то, что укусило меня в прошлом, хотя вы должны знать об этом.Вы фактически получаете ссылку на объект, который принадлежит синглтону.Вы не являетесь владельцем этого объекта.
1) Не пишите код, который может привести к выполнению деструктора (скажем, с помощью общего указателя на возвращенную ссылку), или пишите любой другой код, который может вызвать объектв конечном итоге в плохом состоянии.
2) В многопоточном приложении позаботьтесь о правильной блокировке полей в объекте, если объект может использоваться более чем одним потоком.
3) В многопоточном приложении убедитесь, что все потоки, которые содержат ссылки на объект, завершаются до выгрузки программы.Я видел случай, когда код синглтона находится в одной библиотеке DLL;поток, содержащий ссылку, живет в другой библиотеке DLL.Когда программа заканчивается, поток все еще активен.DLL, содержащая код синглтона, была выгружена первой;поток, который был еще жив, пытался что-то сделать с объектом синглтона и вызвал сбой.