Каква е реалната (т.е. практическа) разлика между статичен клас и шаблона singleton?
И двата могат да бъдат извикани без инстанциране, и двата предоставят само един "Instance" и нито един от тях не е безопасен за нишки. Има ли някаква друга разлика?
Какво ви кара да твърдите, че нито singleton, нито статичен метод не са безопасни за нишки? Обикновено и двата метода трябва да бъдат имплементирани, за да са безопасни за нишки.
Голямата разлика между синглетон и куп статични методи е, че синглетоните могат да имплементират интерфейси (или да произлизат от полезни базови класове, макар че това е по-рядко срещано, според моя опит), така че можете да предадете синглетона, сякаш е "просто друга имплементация".
При шаблона singleton можете да създадете singleton като инстанция на производен тип, но не можете да направите това със статичен клас.
Бърз пример:
if( useD3D )
IRenderer::instance = new D3DRenderer
else
IRenderer::instance = new OpenGLRenderer