3

我在Java中经常这样做......

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

现在我正在尝试为std::string. 这是我所拥有的...

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

为了完整起见,这aFunctionThatMightThrowAnException()可能看起来像......

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

我对 C++ 版本有三个问题:

  • 这是解决此类问题的公认方法吗?还是将somethingintoaFunction作为参考更常见?
  • 我的任务是somethingaFunction...安全返回吗?具体是原来分配的内存"A default value."释放了吗?
  • 如果抛出异常,是否有我看不到的副作用?
4

1 回答 1

6

这是解决此类问题的公认方法吗?

是的。

还是将某些东西作为参考传递给aFunction更常见?

不。

我的任务作为从 aFunction 的返回......安全吗?特别是最初分配给“A 默认值”的内存。释放?

是的。

如果抛出异常,是否有我看不到的副作用?

不。

于 2012-12-02T14:43:42.720 回答