Rimane allocata unicode in caso la seconda chiamata a mbstowcs fallisca.
Per il resto mi sembra tutto a posto (anche se io avrei usato le std::string per le conversioni).