mardi 31 janvier 2017

How to obtain the content of rapidjson::StringBuffer?

A function like this:

std::string getJson()
{
    rapidjson::StringBuffer buffer;
    rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
    // calling writer events....
    return {buffer.GetString(), buffer.GetSize()};
}

is not an option as it will deep copy the content of buffer to the returning std::string, while the point is to reuse the content.

Changing the return type to const char * and just doing return buffer.GetString(); (or changing the return type to std::string_view and just doing return {buffer.GetString(), buffer.GetSize()};), is not an option as well as it seems the destructor of buffer deallocates the internal storage so the returned pointer will actually be dead.

The question is how can I prevent the deallocation of the content by sort of "taking" the ownership from buffer?

Aucun commentaire:

Enregistrer un commentaire