Я не использую RapidXML, но, возможно, мой подход может решить вашу проблему.
Я начал использовать Xerces, но я обнаружил, что он тяжел, помимо других мелких неприятностей, поэтому я перешел в CPPDOM. Когда я сделал это, я решил создать набор классов-оболочек, чтобы мой код не зависел от конкретного «движка» XML, и при необходимости я мог бы портировать на другой.
Я создал свои собственные классы для представления базовых объектов DOM (узла, документа и т. Д.). Эти классы внутренне используют идиому pimpl для использования объектов CPPDOM.
Поскольку мой объект узла содержит «реальный» объект узла (из CPPDOM), я могу управлять чем угодно, поэтому правильное распределение и освобождение строк не будет проблемой там.
Поскольку мой код для CPPDOM, я не думаю, что он будет для вас очень полезным, но я могу опубликовать его, если хотите.
Кстати, если у вас уже слишком много кода, который уже использует RapidXML, вы можете воспроизвести его интерфейсы в ваших классах-оболочках. Я этого не делал, потому что код, который использовал Xerces, был не таким длинным, и мне все равно пришлось бы его переписать.