If the new operator throws in the json::find methods then result.oi_ is deleted again in the destructor of json::iterator/json::const_iterator, which is a double delete and undefined behaviour.