То есть вы утверждаете, что если один синглтон обращаются конструктора к другому, то проблем не будет? :facepalm:
Пример
C++ (Qt)
// глобальные переменные
QList <int> theGlobalList;
MyClass theGlobalClass(theGlobalList);
const MyClass2 theGlobalClass2(theGlobalClass);
Какие здесь проблемы с инициализацией? Никаких, любая "нелокальная" (в терминах стандарта) переменная может использовать объявленные ранее. Порядок не определен для переменных объявленных в разных единицах трансляции - ну так об этом здесь речь не идет (см ниже).
Предоставьте мне желательно другой способ безопасного многопоточного вызова любого метода без использования мутекса
Если Вы хотели показать себя "опытным практиком", то у Вас была прекрасная возможность. Практик не заморачивался бы с никакими блокировками, а написал бы так
C++ (Qt)
MySingle * MySingle::Instance( void )
{
if (!mInstance)
mInstance = new MySingle;
return mInstance;
}
Да, это "небезопасно", но достаточно вызвать MySingle::Instance один раз (напр на старте) - и проблемы нет. Или обеспечить вызов перед перед запуском использующих его ниток. Затрудняюсь привести пример когда это невозможно. А часто (пусть и не всегда) можно тупо объявить его глобальной переменной которая гарантировано будет инициализироваться только в главной нитке до main. Однако вместо этого Вы несете такую пургу
А если он будет вызываться 60 раз в секунду - тогда голову надо пожмякать тому, кто напишет такую программу.
что даже неудобно слушать
Или я чего то не понимаю, или вы слишком много требуете от простого синглтона..
Вы указываете что в новом стандарте проблема инициализации глобальных переменных решена. Это бесспорно, но речь шла о создании синглтона в куче, резоны найдутся. Выходит объявить "безопасную" глобальную переменную могу, а указатель нет. Или как?