DBClientCursorShimCursorID*.

Also, might be clearer to just do:

c->shim = std::auto_ptr<...>(new DBClientCursorShimCursorID(*c));

and then access via c->shim consistently. That way you never have the bare allocation "hanging out there", even just for a line.