Siempre que la asignación y la desasignación de la memoria estén protegidas adecuadamente y, también se asegura de que las estructuras solo se accedan mientras están bajo el mismo mutex, realmente no puedo ver que esto sea un problema. Tenga en cuenta que esto se aplica al acceso de lectura y escritura, no solo para el acceso de escritura, ya que necesita asegurarse de que la estructura permanezca donde está mientras alguien está leyendo datos de ella.
¿Hay alguna posibilidad de que algún código en alguna parte intente acceder a estas estructuras de datos fuera de la protección de exclusión mutua? O peor, ¿podría haber alguna posibilidad de que algunas de estas estructuras sean víctimas de las consideraciones de por vida del objeto C++ (por ejemplo, están siendo destruidas porque se referencian mediante boost :: shared_ptrs y el último shared_ptr acaba de salir del edificio?
¿Está 100% seguro de que es una corrupción de memoria? Otro error que se ve muy similar es cuando algún código se mantiene en una referencia que no debería y el objeto referenciado se mueve debido a la reasignación de memoria. Este no es un escenario tan extravagante como añadir otro elemento a un vector que puede desencadenar (sólo para dar un ejemplo).
No existe un requisito estricto para la protección de exclusión mutua al acceder al objeto, siempre y cuando solo un hilo "posea" el puntero al objeto a la vez. Por ejemplo, en el modelo productor/consumidor mencionado en otra respuesta –