The main problem is that it's easy to forget to unlock it again.

If you need to protect CConverterType's use, then it's best to put the CSingleLock outside it, and derive CConverterType from CCriticalSection.  That way you can just lock the convertor while you use it, and immediately as the CSingleLock goes out of scope it unlocks.