Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning a std::string from a function that might throw an exception

I do this a lot in Java...

String something = "A default value.";
try {
    something = this.aFunctionThatMightThrowAnException();
} catch (Exception ignore) { }
this.useTheString(something);

Now I'm trying to find an equivalent approach for std::string. Here is what I have...

std::string something("A defualt value.");
try {
    something = this->aFunctionThatMightThrowAnException();
} catch (const std::exception& ignore) { }
this->useTheString(something);

For completeness, here is what aFunctionThatMightThrowAnException() might look like...

std::string MyClass::aFunctionThatMightThrowAnException() {
    /* Some code that might throw an std::exception. */
    std::string aString("Not the default.");
    return aString;
}

I have three questions about the C++ version:

  • Is this an accepted approach to this kind of problem? Or is it more common to pass the something into aFunction as a reference?
  • Is my assignment to something as the return from aFunction... safe? Specifically is the memory that was originally assigned to "A default value." released?
  • Are there side effects I can't see in the case an exception is thrown?
like image 298
John Fitzpatrick Avatar asked Feb 26 '26 01:02

John Fitzpatrick


1 Answers

Is this an accepted approach to this kind of problem?

Yes.

Or is it more common to pass the something into aFunction as a reference?

No.

Is my assignment to something as the return from aFunction... safe? Specifically is the memory that was originally assigned to "A default value." released?

Yes.

Are there side effects I can't see in the case an exception is thrown?

No.

like image 169
Lightness Races in Orbit Avatar answered Feb 27 '26 14:02

Lightness Races in Orbit