For me it's not harder to remember 'delete' after 'new' :)

I like this idea. And implement guard in CConverterType as "try_lock" should return "false".
Is it better? Right now we have straight name **GetAndLockConveter** and it's used only one time externally.

For me both are fine. Implement with derive from CSingleLock and try_lock guard? This guard can be false positive if actually locked in another thread.