Я не думаю, что существует общепринятый правильный способ сделать это. Проблема в том, что шаблон Singleton избегается в современном программном обеспечении, поскольку наличие глобальной ссылки на определенный объект делает модульное тестирование действительно трудным, иногда невозможным.
Не поймите меня неправильно, это нормально, если у вас есть синглеты, где это кажется логичным. Проблема заключается в шаблоне, когда вы обращаетесь к ним через глобальную переменную или функцию вроде MySingletonClass::getInstance()
.
Попробуйте ввести его вместо этого там, где это необходимо с помощью параметра конструктора или методов сеттера.
О многопоточности: я не думаю, что синглтоны являются особыми в этом аспекте. Они такие же, как и любой доступ к объекту одновременно.
Один пример - мой синглтон - это сетевое соединение, которое должно быть уникальным экземпляром. Я хочу использовать его одновременно, чтобы избежать зависаний gui, но у меня ошибка, которую я написал в вопросе. Люди в stackoverflow говорят: «Создайте объект в куче и ...», но он является одиночным, я не могу создать его в куче +, он должен быть уникальным. –
Это нормально. У вас может быть это uniqe, без проблем. Вы можете создать его в куче, почему бы и нет? Исследование предмета о одиночных играх. Поймите, что наличие синглтона отличается от использования singleton _pattern_. Это может быть хорошей отправной точкой: [link] (http://stackoverflow.com/questions/7267061/alternatives-to-singletons). –