AS>>AS>>struct MeyersSingleton
AS>>{
AS>> static MeyersSingleton &Instance()
AS>> {
AS>> static MeyersSingleton obj;
AS>> return obj;
AS>> }
maq>// skipped
AS>>
maq>Оффтопик:
maq>В книге "Применение шаблонов проектирования" Влиссидес утверждает что
maq>синглетон Мейерса потоконебезопасен, так как некоторые компиляторы генерируют
maq>небезопсный код для метода Instance, который не получится защитить.
maq>Знать бы что за компиляторы еще такие...
Да, я тоже про это думал. Похоже, VC6 не беспокоится об этом:
mov al, BYTE PTR ?$S223@?1??Instance@?$CMeyersSingleton@VCNetworkSession@@@@SAAAVCNetworkSession@@XZ@4EA ; ?$S223@?1??Instance@?$CMeyersSingleton@VCNetworkSession@@@@SAAAVCNetworkSession@@XZ@4EA
mov BYTE PTR __$EHRec$[esp+80], 4
test al, 1
jne SHORT $L90959
or al, 1
push 10 ; 0000000aH
mov ecx, OFFSET FLAT:?obj@?1??Instance@?$CMeyersSingleton@VCNetworkSession@@@@SAAAVCNetworkSession@@XZ@4U2@A
mov BYTE PTR ?$S223@?1??Instance@?$CMeyersSingleton@VCNetworkSession@@@@SAAAVCNetworkSession@@XZ@4EA, al ; ?$S223@?1??Instance@?$CMeyersSingleton@VCNetworkSession@@@@SAAAVCNetworkSession@@XZ@4EA
push OFFSET FLAT:?obj@?1??Instance@?$CMeyersSingleton@VCNetworkSession@@@@SAAAVCNetworkSession@@XZ@$AU1@A ; obj
call _atexit
add esp, 4
$L90959:
Из этого кода очевидно, что VC6 забыл про потокобезопасность, хотя ему явно указано /MT.
Тогда какие варианты кроме создания синглтона на хипе и регистрации уничтожения при помощи _atexit?