I'd prefer this block be written as:

```c++
ControlObjectThread* cot = m_controlCache.value(key, NULL);
if (cot == NULL) {
    // create COT  
}
```
That avoids the double lookup (contains / value).