John Fitzpatrick
John Fitzpatrick

Reputation: 4349

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:

Upvotes: 3

Views: 161

Answers (1)

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385204

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.

Upvotes: 6

Related Questions