On Fri, Aug 28, 2015 at 8:59 AM, Jonathan Wakely <jwak...@redhat.com> wrote:
> There seems to be no need to construct a std::string here, just pass a
> const char* (see below).

To be honest, I wasn't considering performance for a bit, since
exceptions are already considered slow by me :P. But yes, we can do
less allocations.

> I wonder if we want to make this more efficient by adding a private
> member to regex_error that would allow information to be appended to
> the string, rather then creating a new regex_error with a new string.

I can add a helper function to _Scanner to construct the exception
object for only once. For functions that can't access this helper, use
return value for error handling.

> I suggest adding another overload that takes a const char* rather than
> std::string. The reason is that when using the new ABI this function
> will take a std::__cxx11::string, so calling it will allocate memory
> for the string data, then that string is passed to the regex_error
> constructor which has to convert it internally to an old std::string,
> which has to allocate a second time.

First, to make it clear: due to _M_get_location_string(), we need
dynamic allocation.

So is it good to have an owned raw pointer stored in runtime_error,
pointing to a heap allocated char chunk, which will be deallocated in
regex_error's dtor?


-- 
Regards,
Tim Shen

Reply via email to