Home > other >  Does std::string class handle clean up if the assignment operator fails due to length_error or bad_a
Does std::string class handle clean up if the assignment operator fails due to length_error or bad_a

Time:10-23

Does std::string class handle clean up if the assignment operator fails due to length_error or bad_alloc? Does it give me back my intact string I provided?

given this reference from https://cplusplus.com/reference/string/string/operator=/ about exceptions

if the resulting string length would exceed the max_size, a length_error exception is thrown. A bad_alloc exception is thrown if the function needs to allocate storage and fails.

The explanation below is assuming std::string class doesn't fix any assignment that was done.

I figured if I assigned *this ("num" below) to a temp I could save any damage done to *this if the line num = other.num; below failed. The reason I am not sure if this is futile is because this snippet num = temp;, The fact I do not check this for success could be a failure. Is my code futile? Is there a standard way to handle this that I am missing?

const BigInt 
&BigInt::operator=(const BigInt &other) 
{   
    string temp = num;                          // using string operator=
    if (temp.compare(num) == 0)
    {
        try 
        {
            num = other.num;
        }
        catch(...)
        {   
            num = temp;
            throw;
        }
        return *this;
    }
    return *this;
}

CodePudding user response:

Since C 11 it leaves the string intact.

If an exception is thrown for any reason, this function has no effect (strong exception guarantee). (since C 11)

cppreference

  • Related