For my education: the thread safety of const functions is enforced because you define both const and non-const versions of the arrow operator, of the dereference operator, and of the get method: the const ones return const pointers or references. In this way, the compiler can only call the const member functions of the objects pointed in that class.
I am right?